Kết nối với Oracle DB bằng Python

Oct 21 2020

Tôi đang cố gắng kết nối với Cơ sở dữ liệu Oracle của mình bằng Python. Tôi hiện đang sử dụng cx_Oracle để kết nối với nó nhưng không hoạt động ...

#!/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()

Lỗi:

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

Tôi đã truy cập Trang web và không tìm thấy gì có thể giúp được ...

Có điều gì đó trong Mã của tôi sai hay là điều gì đó khác?

Trả lời

1 ChristopherJones Oct 22 2020 at 05:52

Lỗi của bạn là

DPI-1047: Không thể định vị thư viện Máy khách Oracle 64-bit: "libclntsh.so: không thể mở tệp đối tượng được chia sẻ: Không có tệp hoặc thư mục như vậy".

Bạn cần mã nhị phân ứng dụng khách Oracle Linux 64-bit trong đường dẫn tìm kiếm hệ điều hành của mình trước khi bắt đầu quy trình Python.

Cách dễ nhất là cài đặt Oracle Instant Client miễn phí . Sử dụng phiên bản 19c mới nhất - nó sẽ cho phép bạn kết nối với Oracle DB 11.2 trở lên. Hướng dẫn cài đặt có ở cuối trang tải xuống. Nếu bạn cài đặt RPM, mọi thứ đều được định cấu hình cho bạn. Nếu bạn cài đặt ZIPS, tôi muốn đặt đường dẫn tìm kiếm thư viện với đường dẫn ldconfignày cũng được hiển thị trong hướng dẫn.

1 AlonBarad Oct 21 2020 at 20:36

Đảm bảo rằng bạn đã cài đặt đúng ứng dụng khách oracle (bạn có thể tìm thấy gói ứng dụng khách oracle từ đây "https://www.oracle.com/in/database/technologies/instant-client/winx64-64-downloads.html" và thêm thư mục đã tải xuống bên trong thư mục nơi python được cài đặt và sau đó thêm vị trí này (vị trí của thư mục gói ứng dụng khách của bạn) vào biến môi trường của hệ thống. Hy vọng điều đó sẽ hoạt động.

Tôi đề nghị bạn trước tiên nên kiểm tra tính tương thích của kiến ​​trúc Hệ điều hành, Python và Oracle Instant Client:

import platform
platform.architecture()

Sau đó, tôi chắc chắn khuyên bạn nên đặt Oracle Instant Client bên trong sổ ghi chép jupyter của bạn:

import os
os.environ["PATH"] = "Complete Location of Instant Client Folder" + ";" + os.environ["PATH"]

Nguồn: lỗi cx_Oracle. DPI-1047: Không thể định vị thư viện Máy khách Oracle 64-bit