Oracle
 sql >> база данни >  >> RDS >> Oracle

Как мога да получа достъп до Oracle от Python?

Ето какво ми свърши работа. Моите версии на Python и Oracle са малко по-различни от вашите, но трябва да се прилага същият подход. Просто се уверете, че версията на двоичния инсталатор на cx_Oracle съвпада с версиите на вашия клиент на Oracle и Python.

Моите версии:

  • Python 2.7
  • Oracle Instant Client 11G R2
  • cx_Oracle 5.0.4 (Unicode, Python 2.7, Oracle 11G)
  • Windows XP SP3

Стъпки:

  1. Изтеглете пакета Oracle Instant Client. Използвах instantclient-basic-win32-11.2.0.1.0.zip. Разархивирайте го в C:\your\path\to\instantclient_11_2
  2. Изтеглете и стартирайте двоичния инсталатор на cx_Oracle. Използвах cx_Oracle-5.0.4-11g-unicode.win32-py2.7.msi. Инсталирах го за всички потребители и го насочих към местоположението на Python 2.7, което намери в системния регистър.
  3. Задайте променливите на средата ORACLE_HOME и PATH чрез пакетен скрипт или какъвто и да е механизъм, който има смисъл в контекста на вашето приложение, така че да сочат към директорията на Oracle Instant Client. Вижте източника на oracle_python.bat по-долу. Сигурен съм, че трябва да има по-елегантно решение за това, но исках да огранича промените в цялата система, доколкото е възможно. Уверете се, че сте поставили целевата директория Oracle Instant Client в началото на PATH (или поне преди всяка друга клиентска директория на Oracle). В момента правя само неща от командния ред, така че просто стартирам oracle_python.bat в обвивката, преди да стартирам всякакви програми, които изискват cx_Oracle.
  4. Изпълнете regedit и проверете дали има ключ NLS_LANG, зададен в \HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE. Ако е така, преименувайте ключа (промених го на NLS_LANG_OLD) или го премахнете. Този ключ трябва да се използва само като стойност по подразбиране NLS_LANG за Oracle 7 клиента, така че е безопасно да го премахнете, освен ако случайно не използвате Oracle 7 клиента някъде другаде. Както винаги, не забравяйте да архивирате системния си регистър, преди да направите промени.
  5. Сега трябва да можете да импортирате cx_Oracle във вашата програма на Python. Вижте източника na oracle_test.py по-долу. Имайте предвид, че трябваше да задам низовете за връзка и SQL на Unicode за моята версия на cx_Oracle.

Източник:oracle_python.bat

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

Източник: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()

Възможни проблеми:

  • „ORA-12705:Няма достъп до файлове с NLS данни или е посочена невалидна среда“ – попаднах на това, преди да направя промяната в системния регистър NLS_LANG.
  • „TypeError:аргумент 1 трябва да бъде unicode, а не str“ – ако трябва да зададете низа за връзка на Unicode.
  • „TypeError:очаквам None или низ“ – ако трябва да зададете SQL низа на Unicode.
  • „ImportError:DLL неуспешно зареждане:Посочената процедура не може да бъде намерена.“ - може да показва, че cx_Oracle не може да намери подходящата клиентска DLL на Oracle.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Научете за пакета DBMS_OUTPUT в Oracle

  2. Преобразувайте минутите във формат HH24:MI

  3. Разлика между клауза WITH и подзаявка?

  4. Oracle :как да извадите две дати и да получите минути от резултата

  5. Разлика между клаузите ON и WHERE в съединенията на SQL таблица