Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Làm cách nào để truy cập Oracle từ Python?

Đây là những gì đã làm việc cho tôi. Phiên bản Python và Oracle của tôi hơi khác so với phiên bản của bạn, nhưng nên áp dụng cùng một cách tiếp cận. Chỉ cần đảm bảo rằng phiên bản trình cài đặt nhị phân cx_Oracle khớp với phiên bản Python và ứng dụng khách Oracle của bạn.

Phiên bản của tôi:

  • Python 2.7
  • Ứng dụng khách tức thì Oracle 11G R2
  • cx_Oracle 5.0.4 (Unicode, Python 2.7, Oracle 11G)
  • Windows XP SP3

Các bước:

  1. Tải xuống gói Oracle Instant Client. Tôi đã sử dụng Instantclient-basic-win32-11.2.0.1.0.zip. Giải nén nó vào C:\ your \ path \ to \ Instantclient_11_2
  2. Tải xuống và chạy trình cài đặt nhị phân cx_Oracle. Tôi đã sử dụng cx_Oracle-5.0.4-11g-unicode.win32-py2.7.msi. Tôi đã cài đặt nó cho tất cả người dùng và trỏ nó đến vị trí Python 2.7 mà nó tìm thấy trong sổ đăng ký.
  3. Đặt các biến môi trường ORACLE_HOME và PATH thông qua tập lệnh lô hoặc bất kỳ cơ chế nào có ý nghĩa trong ngữ cảnh ứng dụng của bạn, để chúng trỏ đến thư mục Oracle Instant Client. Xem nguồn oracle_python.bat bên dưới. Tôi chắc chắn rằng phải có một giải pháp thanh lịch hơn cho việc này, nhưng tôi muốn hạn chế các thay đổi trên toàn hệ thống của mình càng nhiều càng tốt. Đảm bảo bạn đặt thư mục Máy khách tức thì Oracle được nhắm mục tiêu ở đầu PATH (hoặc ít nhất là trước bất kỳ thư mục máy khách Oracle nào khác). Hiện tại, tôi chỉ thực hiện công việc dòng lệnh nên tôi chỉ chạy oracle_python.bat trong shell trước khi chạy bất kỳ chương trình nào yêu cầu cx_Oracle.
  4. Chạy regedit và kiểm tra xem có khóa NLS_LANG được đặt tại \ HKEY_LOCAL_MACHINE \ SOFTWARE \ ORACLE hay không. Nếu vậy, hãy đổi tên khóa (tôi đã đổi thành NLS_LANG_OLD) hoặc bỏ đặt. Khóa này chỉ nên được sử dụng làm giá trị NLS_LANG mặc định cho máy khách Oracle 7, vì vậy có thể an toàn để xóa nó trừ khi bạn tình cờ sử dụng máy khách Oracle 7 ở một nơi khác. Như mọi khi, hãy nhớ sao lưu sổ đăng ký của bạn trước khi thực hiện thay đổi.
  5. Bây giờ, bạn có thể nhập cx_Oracle trong chương trình Python của mình. Xem nguồn oracle_test.py bên dưới. Lưu ý rằng tôi phải đặt kết nối và chuỗi SQL thành Unicode cho phiên bản cx_Oracle của mình.

Nguồn:oracle_python.bat

@echo off
set ORACLE_HOME=C:\your\path\to\instantclient_11_2
set PATH=%ORACLE_HOME%;%PATH%

Nguồn:oracle_test.py

import cx_Oracle

conn_str = u'user/[email protected]:port/service'
conn = cx_Oracle.connect(conn_str)
c = conn.cursor()
c.execute(u'select your_col_1, your_col_2 from your_table')
for row in c:
    print row[0], "-", row[1]
conn.close()

Sự cố có thể xảy ra:

  • "ORA-12705:Không thể truy cập tệp dữ liệu NLS hoặc môi trường không hợp lệ được chỉ định" - Tôi gặp phải vấn đề này trước khi thực hiện thay đổi sổ đăng ký NLS_LANG.
  • "TypeError:đối số 1 phải là unicode, không phải str" - nếu bạn cần đặt chuỗi kết nối thành Unicode.
  • "TypeError:mong đợi Không có hoặc một chuỗi" - nếu bạn cần đặt chuỗi SQL thành Unicode.
  • "ImportError:DLL load không thành công:Không tìm thấy quy trình đã chỉ định." - có thể chỉ ra rằng cx_Oracle không thể tìm thấy DLL ứng dụng khách Oracle thích hợp.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hàm SIN () trong Oracle

  2. Hàm JSON_QUERY () trong Oracle

  3. Tạo chuỗi UUID không có REGEXP_REPLACE và PL / SQL

  4. Làm cách nào để tạo id với AUTO_INCREMENT trên Oracle?

  5. Oracle 11g - Kiểm tra ràng buộc với RegEx