cx oracle شرح cx_Oracle والتوصيل إلى أوراكل دب عن بعد




اوراكل cx-oracle (3)

كيف يمكنك الاتصال بخادم بعيد عن طريق عنوان إب بالطريقة التي تود، سكلديفيلوبر، هي قادرة على الاتصال بقواعد البيانات مع عنوان إب فقط، اسم المستخدم، سيد وكلمة المرور؟

كلما أحاول تحديد وعنوان إب، يبدو أن أخذها محليا.

وبعبارة أخرى، كيف يجب تنسيق السلسلة ل cx_Oracle.connect () إلى قاعدة بيانات غير محلية؟

كانت هناك مشاركة سابقة تم إدراجها كجواب يتصل بأوراكل عبر وحدة cx_Oracle باستخدام الشفرة التالية:

#!/usr/bin/python

import cx_Oracle
connstr='scott/tiger'
conn = cx_Oracle.connect(connstr)
curs = conn.cursor()

curs.execute('select * from emp')
print curs.description
for row in curs:
    print row
conn.close()

Answer #1

يمكنك تحديد الملقم في سلسلة الاتصال، على سبيل المثال:

import cx_Oracle
connstr = 'scott/[email protected]:1521/orcl'
conn = cx_Oracle.connect(connstr)
  • "الخادم" هو الخادم، أو عنوان إب إذا كنت تريد.
  • "1521" هو المنفذ الذي تستمع إليه قاعدة البيانات.
  • "أوركل" هو اسم المثيل (أو خدمة قاعدة البيانات).

Answer #2

أود أن أفعل ذلك بهذه الطريقة:

ip = '192.168.0.1'
port = 1521
SID = 'YOURSIDHERE'
dsn_tns = cx_Oracle.makedsn(ip, port, SID)

db = cx_Oracle.connect('username', 'password', dsn_tns)

أحد الأسباب الرئيسية التي أحبها هذا الأسلوب هو أنني عادة ما يكون ملف TNSNAMES.ORA ملقى حول مكان ما، ويمكنني التحقق من أن الكائن dsn_tns سوف تفعل الشيء الصحيح عن طريق القيام:

print dsn_tns

ومقارنة الإخراج إلى بلدي TNSNAMES.ORA


Answer #3

بدلا من تحديد سيد، يمكنك إنشاء دسن والاتصال عبر service_name مثل:

import cx_Oracle
ip = '192.168.0.1'
port = 1521
service_name = 'my_service'
dsn = cx_Oracle.makedsn(ip, port, service_name=service_name)

db = cx_Oracle.connect('user', 'password', dsn)

فائدة استخدام اسم الخدمة بدلا من معرف المثيل المحدد (سيد)، هو أنها ستعمل في بيئة راك كذلك (باستخدام سيد لا). تتوفر هذه المعلمة كما في cx_Oracle الإصدار 5.1.1 (28 آب (أغسطس) 2011)