zoukankan      html  css  js  c++  java
  • python使用cx_Oracle连接oracle

    1.使用pip命令安装cx_Oracle

    $ pip install cx_Oracle

    2.安装oracle客户端,并添加到path

    下载路径:

    http://www.oracle.com/technetwork/database/database-technologies/instant-client/downloads/index.html

    根据对应的系统类型和版本以及oracle版本进行下载,比如64位python的windows平台,oracle版本为11g,

    下载instantclient-basic-windows.x64-11.2.0.4.0.zip

    http://www.oracle.com/technetwork/topics/winx64soft-089540.html

    解压至安装路径,然后将该路径添加至环境变量path后,比如解压在C:Oracle路径下,那么在path环境变量后面加上C:Oracleinstantclient_11_2;即可

    3.使用示例

    import cx_Oracle
    
    conn = cx_Oracle.connect('user/passwd@host/instance')
    curs = conn.cursor()
    sql = 'select * from product_component_version'
    curs.execute(sql)
    
    for result in curs:
        print(result)
    
    curs.close()
    conn.close()



    cx_Oracle连接数据库总结

     

    python中连接oracle数据库使用第三方库文件cx_Oracle时遇到了各种问题,网上查找资料调试了几天才弄好,下面是不断调试后总结的一些经验。
    1.oracle客户端(Oracle Instant Client)版本需要和操作系统版本位数相同,同时cx_Oracle官方文档(http://cx-oracle.readthedocs.io/en/latest/installation.html)上有这样一段话

    Version 12.2 client libraries can connect to Oracle Database 11.2 or greater. Version 12.1 client libraries can connect to Oracle Database 10.2 or greater. Version 11.2 client libraries can connect to Oracle Database 9.2 or greater.
    根据安装的Oracle数据库版本选择Oracle客户端(下载地址 http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html),我安装的oracle数据库是11g版本,这里的客户端库在下载客户端Oracle Instant Client时就包含在内

    下载好oracle客户端后,在客户端目录下新建一/network/admin目录,并在该目录下新建tnsnames.ora文件,增加自己的数据库别名配置。
    示例如下:

    复制代码
    1 MyDB=
    2 (DESCRIPTION =
    3 (ADDRESS = (PROTOCOL = TCP)(HOST= IP)(PORT = 1521))
    4 (CONNECT_DATA =
    5 (SERVER = DEDICATED)
    6 (SERVICE_NAME = )
    7 )
    8 )
    复制代码

    注意格式要排列好
    MyDB为Database名,Host为IP地址, SERVICE_NAME为数据库服务器的实例名。

    2.安装的python版本位数也需与操作系统版本位数相同

    3.安装的第三方库cx_Oracle需要版本位数和操作系统相同同时,与Oracle数据库对应的版本也应相同,因我安装的数据库是11g,所以下载的是cx_Oracle-5.3-11g.win-amd64-py3.5-2 若安装的数据库是12c则应下载相应版本cx_Oracle(地址 https://pypi.python.org/pypi/cx_Oracle/5.3)

    同时可能出现的其他问题在cx_Oracle官方文档中也写出了
    1. DPI-1047: Oracle Client library cannot be loaded
    Check that Python, cx_Oracle and your Oracle Client libraries are all 64-bit or all 32-bit. The DPI-1047 message will tell you whether the 64-bit or 32-bit Oracle Client is needed for your Python.
    检查python,cx_Oracle和Oracle Instant Client版本是否一致,DPI-1047 message会告诉你安装的客户端版本是否正确。

    2.On Windows, restart your command prompt and use set PATH to check the environment variable has the correct Oracle Client listed before any other Oracle directories.
    记得配置Oracle客户端的环境变量,例如我的配置是 PATH: E:oracleinstantclient_12_2;

    3.On Windows, use the DIR command on the directory set in PATH. Verify that OCI.DLL exists there.
    检查oracle客户端(instantclient)目录下存在oci.dll文件

    oracle客户端libraries需要正确的Visual Studio版本,具体可见(https://oracle.github.io/odpi/doc/installation.html#windows)中windows目录下

    最后一切就绪,程序未出错,但并无输出时感觉内心有些崩溃

    刚刚开始连接时,我机器上的oracle是32位客户端连64位服务器端,客户端位于 D:appusernameproduct11.2.0client_1

    尝试连接时,会报错如下:

    cx_Oracle.DatabaseError: DPI-1047: 64-bit Oracle Client library cannot be loaded: "d:appsabreproduct11.2.0client_1inoci.dll is not the correct architecture". See https://oracle.github.io/odpi/doc/installation.html#windows for help

    按照提示中的链接,找到oracle的64位客户端文件package,下载,放到D:instantclient_11_2,然后把这个路径添加到系统path中,再次尝试连接,就可以了。

    复制代码
     1 import cx_Oracle
     2 
     3 connection = cx_Oracle.Connection("Username/密码@Host:Port/SERVICE_NAME")
     4 cursor = connection.cursor()
     5 
     6 try:
     7   cursor.execute("select 1 / 0 from dual")
     8 except cx_Oracle.DatabaseError as exc:
     9   error, = exc.args
    10 print("Oracle-Error-Code:", error.code)
    11 print("Oracle-Error-Message:", error.message)
    复制代码

    最后查看意识到是执行了sql语句,但并未进行输出

    cursor.execute("select 1 / 0 from dual")


    下一行增加
     print(cursor.description) 

  • 相关阅读:
    [Python] Python基础字符串
    [android] 手机卫士绑定sim卡
    [Laravel] Laravel的基本数据库操作部分
    [android] 手机卫士手势滑动切换屏幕
    [android] 手机卫士界面切换动画
    [android] 手机卫士设置向导页面
    [javaEE] Servlet的手动配置
    [android] 手机卫士保存密码时进行md5加密
    [android] 手机卫士自定义对话框布局
    [Laravel] Laravel的基本使用
  • 原文地址:https://www.cnblogs.com/klb561/p/10005523.html
Copyright © 2011-2022 走看看