การเชื่อมต่อกับ Oracle DB ด้วย Python
ฉันพยายามเชื่อมต่อกับ Oracle Database ของฉันด้วย Python ฉันกำลังใช้ cx_Oracle เพื่อเชื่อมต่อ แต่ใช้งานไม่ได้ ...
#!/usr/bin/python3
import cx_Oracle
dsn_tns = cx_Oracle.makedsn('Host Name', 'Port Number', service_name='Service Name')
conn = cx_Oracle.connect(user=r'user', password='password', dsn=dsn_tns)
c = conn.cursor()
c.execute('select * from person')
conn.close()
ข้อผิดพลาด:
conn = cx_Oracle.connect(user=r'g_user', password='G_user', dsn=dsn_tns)
cx_Oracle.DatabaseError: DPI-1047: Cannot locate a 64-bit Oracle Client library: "libclntsh.so: cannot open shared object file: No such file or directory". See https://cx-oracle.readthedocs.io/en/latest/user_guide/installation.html for help
ฉันไปที่ไซต์และไม่พบอะไรที่สามารถช่วยได้ ...
มีบางอย่างในรหัสของฉันผิดหรือเป็นอย่างอื่น?
คำตอบ
ข้อผิดพลาดของคุณคือ
DPI-1047: ไม่พบไลบรารีไคลเอ็นต์ Oracle 64 บิต: "libclntsh.so: ไม่สามารถเปิดไฟล์อ็อบเจ็กต์ที่แชร์: ไม่มีไฟล์หรือไดเร็กทอรีดังกล่าว"
คุณต้องมีไบนารีไคลเอนต์ Oracle Linux 64 บิตในเส้นทางการค้นหาระบบปฏิบัติการของคุณก่อนที่คุณจะเริ่มกระบวนการ Python
วิธีที่ง่ายที่สุดคือการติดตั้งOracle Instant Clientฟรี ใช้เวอร์ชัน 19c ล่าสุดซึ่งจะช่วยให้คุณเชื่อมต่อกับ Oracle DB 11.2 หรือใหม่กว่า คำแนะนำในการติดตั้งอยู่ที่ส่วนท้ายของหน้าดาวน์โหลด หากคุณติดตั้ง RPM ทุกอย่างจะถูกกำหนดค่าให้คุณ หากคุณติดตั้ง ZIPS ฉันต้องการตั้งค่าเส้นทางการค้นหาไลบรารีldconfigซึ่งแสดงไว้ในคำแนะนำด้วย
ตรวจสอบให้แน่ใจว่าคุณได้ติดตั้งไคลเอนต์ oracle ที่ถูกต้อง (คุณสามารถค้นหาแพ็คเกจไคลเอนต์ oracle ได้จากที่นี่ "https://www.oracle.com/in/database/technologies/instant-client/winx64-64-downloads.html" และเพิ่ม โฟลเดอร์ที่ดาวน์โหลดภายในโฟลเดอร์ที่มีการติดตั้ง python จากนั้นเพิ่มตำแหน่งนี้ (ตำแหน่งของโฟลเดอร์แพ็กเกจไคลเอนต์ของคุณ) ไปยังตัวแปรสภาพแวดล้อมของระบบหวังว่าจะได้ผล
ฉันขอแนะนำให้คุณตรวจสอบความเข้ากันได้ของสถาปัตยกรรม OS, Python และ Oracle Instant Client ของคุณก่อน:
import platform
platform.architecture()
จากนั้นฉันแนะนำให้คุณตั้งค่า Oracle Instant Client ในสมุดบันทึก jupyter ของคุณ:
import os
os.environ["PATH"] = "Complete Location of Instant Client Folder" + ";" + os.environ["PATH"]
ที่มา: cx_Oracle error. DPI-1047: ไม่พบไลบรารีไคลเอ็นต์ Oracle 64 บิต