你如何使用pyodbc连接到oracle

时间:2014-12-08 17:56:02

标签: python oracle

我正在尝试使用pyodbc连接到Oracle数据库,从而获得错误。示例包括ms sql server driver:

在我的/etc/unixODBC/odbc.ini中,我有这个条目:

[test_con]
Driver=Oracle
Description=data repository db
Trace=Yes
ServerName=//db1.example.com:1521/db2_svc1


import pyodbc
cnxn=pyodbc.connect('DSN=test_con, UID=user_id, PWD=passwd123')

我收到此错误:

pyodbc.Error: ('IM012', '[IM012] [unixODBC][Driver Manager]DRIVER keyword syntax error (0) (SQLDriverConnect)')

5 个答案:

答案 0 :(得分:1)

以下代码适用于Mac OS上的mssql,它假定您使用以下命令安装了unixODBC:

$ brew install freetds --with-unixodbc

并且您已编辑了两个odbc配置文件:

  1. <强> /usr/local/Cellar/unixodbc/2.3.2_1/etc/odbcinst.ini

    [freetds的]

    Description =适用于Linux的FreeTDS驱动程序&amp; MacOS上的MSSQL

    驱动器=在/ usr /本地/地窖/ freetds的/ 0.95.80 / LIB / libtdsodbc.0.so

    设置=的/ usr /本地/地窖/ freetds的/ 0.95.80 / LIB / libtdsodbc.0.so

    FileUsage = 1

  2. 修改〜/ Library / ODBC / odbc.ini

    [SQL_SERVER]

    驱动器= freetds的

    服务器= put_ip_here

    端口= 1433

  3. ==代码:

    import pyodbc
    
    connection_string = "Driver={{FreeTDS}};Server={};"\
    "Database={};UID={};PWD={};"\
    .format(db_host, db_name, db_user, db_password)
    
    with pyodbc.connect(connection_string) as db:
        cursor = db.cursor()
    
        cursor.execute("SELECT count(*) FROM aTable")
        ...
    

答案 1 :(得分:1)

pyodbc维护者在记录如何安装Oracle ODBC驱动程序以及如何连接到数据库方面做得非常出色。它对我有用:https://github.com/mkleehammer/pyodbc/wiki/Connecting-to-Oracle-from-RHEL-or-Centos

答案 2 :(得分:1)

我来到这里是为了寻找这个问题的答案,但在其他地方找到了一个更普遍的问题的答案,我想分享这个问题。您可以使用 cx_Oracle 库,在没有 pyodbc 的情况下非常简单地连接到 Oracle 数据库。查看以下安装说明:

https://cx-oracle.readthedocs.io/en/latest/user_guide/installation.html

下面的启动代码:

cx_Oracle.init_oracle_client(lib_dir=r"C:\oracle\instantclient_19_10")

connection = cx_Oracle.connect(
user="username",
password="password",
dsn="address")

cursor = connection.cursor()

答案 3 :(得分:0)

答复已经很晚了,但对将来的读者很有用。

安装:

  • oracle-instantclient12.2-basic-12.2.0.1.0-1.x86_64.rpm
  • oracle-instantclient12.2-odbc-12.2.0.1.0-2.x86_64.rpm

发件人: http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html

sudo rpm -Uvh oracle-instantclient12.2-*

设置ORACLE_HOME和LD_LIBRARY_PATH

export ORACLE_HOME=/usr/lib/oracle/12.2/client64
export LD_LIBRARY_PATH=/usr/lib/oracle/12.2/client64/lib

在/etc/odbcinst.ini中设置:

[Oracle_test]
Description=Oracle ODBC driver for Oracle 12c
Driver=/usr/lib/oracle/12.2/client64/lib/libsqora.so.12.1
FileUsage=1
Driver Logging=7
UsageCount=1

在Python shell中:

>>> import pyodbc
>>> conn = pyodbc.connect('DRIVER={Oracle_test};Host=1.1.1.1;Port=1521;Service Name=orcl.local;User ID=test1;Password=test1')
>>> print(conn)
<pyodbc.Connection object at 0x7f6acb2c4c00> 

希望它能对某人有所帮助。

PS:您也可以在/etc/ld.so.conf中将驱动程序设置为

/usr/lib/oracle/12.2/client64/lib

运行: ldconfig

答案 4 :(得分:-3)

尝试类似:

import pyodbc
connectString = 'Driver={Microdsoft ODBC for Oracle};Server=<host>:<port>/<db>.<host>;uid= <username>;pwd=<password>'
cnxn = pyodbc.connect(connectString)

阅读一些文档;)https://sites.google.com/site/bcgeopython/examples/getting-the-pyodbc-module