การเชื่อมต่อกับ Oracle DB ด้วย Python

Oct 21 2020

ฉันพยายามเชื่อมต่อกับ 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

ฉันไปที่ไซต์และไม่พบอะไรที่สามารถช่วยได้ ...

มีบางอย่างในรหัสของฉันผิดหรือเป็นอย่างอื่น?

คำตอบ

1 ChristopherJones Oct 22 2020 at 05:52

ข้อผิดพลาดของคุณคือ

DPI-1047: ไม่พบไลบรารีไคลเอ็นต์ Oracle 64 บิต: "libclntsh.so: ไม่สามารถเปิดไฟล์อ็อบเจ็กต์ที่แชร์: ไม่มีไฟล์หรือไดเร็กทอรีดังกล่าว"

คุณต้องมีไบนารีไคลเอนต์ Oracle Linux 64 บิตในเส้นทางการค้นหาระบบปฏิบัติการของคุณก่อนที่คุณจะเริ่มกระบวนการ Python

วิธีที่ง่ายที่สุดคือการติดตั้งOracle Instant Clientฟรี ใช้เวอร์ชัน 19c ล่าสุดซึ่งจะช่วยให้คุณเชื่อมต่อกับ Oracle DB 11.2 หรือใหม่กว่า คำแนะนำในการติดตั้งอยู่ที่ส่วนท้ายของหน้าดาวน์โหลด หากคุณติดตั้ง RPM ทุกอย่างจะถูกกำหนดค่าให้คุณ หากคุณติดตั้ง ZIPS ฉันต้องการตั้งค่าเส้นทางการค้นหาไลบรารีldconfigซึ่งแสดงไว้ในคำแนะนำด้วย

1 AlonBarad Oct 21 2020 at 20:36

ตรวจสอบให้แน่ใจว่าคุณได้ติดตั้งไคลเอนต์ 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 บิต