【问题标题】:how do you connect to oracle using pyodbc你如何使用 pyodbc 连接到 oracle
【发布时间】:2015-02-06 11:01:32
【问题描述】:

我正在尝试使用 pyodbc 连接到 Oracle 数据库,但出现错误。示例包括 ms sql server 驱动程序:

在我的 /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)')

【问题讨论】:

标签: python oracle


【解决方案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()

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      $ brew install freetds --with-unixodbc
      

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

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

        [FreeTDS]

        Description=适用于 MacOS 上 Linux 和 MSSQL 的 FreeTDS 驱动程序

        Driver=/usr/local/Cellar/freetds/0.95.80/lib/libtdsodbc.0.so

        Setup=/usr/local/Cellar/freetds/0.95.80/lib/libtdsodbc.0.so

        FileUsage=1

      2. 编辑~/Library/ODBC/odbc.ini

        [sql_server]

        Driver=FreeTDS

        服务器=put_ip_here

        端口=1433

      == 代码:

      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")
          ...
      

      【讨论】:

      • MSSQL 示例未解决 oracle 连接问题
      • 问题是针对 Oracle 而 FreeTDS 驱动程序针对 MsSQL Server
      【解决方案4】:

      回复迟了,但对以后的读者有用。

      安装:

      • 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 外壳中:

      >>> 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
      

      运行: 配置文件

      【讨论】:

        【解决方案5】:

        尝试类似:

        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

        【讨论】:

        • @ValeiryG,我查看了那个链接,它是 SQL 驱动程序,我在 linux 服务器上。我还是试过了:pyodbc.Error: ('IM002', '[IM002] [unixODBC][Driver Manager]Data source name not found, and no default driver specified (0) (SQLDriverConnect)')
        猜你喜欢
        • 1970-01-01
        • 2012-05-22
        • 2014-07-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-01
        • 1970-01-01
        • 2015-04-26
        相关资源
        最近更新 更多