【Oracle】Python 连接Oracle 数据库

简介:
Python 连接Oracle 数据库,需要使用cx_Oracle 包。
1 下载cx_Oracle
该包的下载地址:http://cx-oracle.sourceforge.net/
下载的时候,注意选择与操作系统和oracle版本相对应的cx_Oracle版本。
2 安装
[root@rac3 python]# rpm -ivh cx_Oracle-5.1.1-11g-py24-1.x86_64.rpm 
Preparing...                ########################################### [100%]
   1:cx_Oracle              ########################################### [100%]

3 测试:   
oracle@rac3:/home/oracle/python>cat test.py 
import cx_Oracle 
username = "yang" 
userpwd = "yang" 
host = "127.0.0.1" 
port = 1523 
dbname = "yangdb" 

dsn=cx_Oracle.makedsn(host, port, dbname) 
connection=cx_Oracle.connect(username, userpwd, dsn) 
cursor = connection.cursor() 
sql = "select * from tab" 
cursor.execute(sql) 
result = cursor.fetchall() 
count = cursor.rowcount 
print "=====================" 
print "Total:", count 
print "=====================" 
for row in result: 
        print row 
cursor.close() 
connection.close()
测试结果:
oracle@rac3:/home/oracle/python>python test.py 
=====================
Total: 9
=====================
('BIG_TABLE', 'TABLE', None)
('BIN$sgD3dAkmWHfgQPoK8Qcq3Q==$0', 'TABLE', None)
('BIND', 'TABLE', None)
('IM_SMS_ADD_FRIEND', 'TABLE', None)
('PARALTAB', 'TABLE', None)
('T1', 'TABLE', None)
('T2', 'TABLE', None)
('T3', 'TABLE', None)
('T4', 'TABLE', None)

遇到的问题:
1 要在oracle 用户才能执行import cx_Oracle
[root@rac3 ~]# python
Python 2.4.3 (#1, Jan 21 2009, 01:11:33) 
[GCC 4.1.2 20071124 (Red Hat 4.1.2-42)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import cx_Oracle
Traceback (most recent call last):
  File "", line 1, in ?
ImportError: libclntsh.so.11.1: cannot open shared object file: No such file or directory
>>>

如果在oracle 也遇到 ImportError: libclntsh.so.11.1: cannot open shared object file: No such file or directory
要查看.bash_profile 文件:和环境变量 LD_LIBRARY_PATH有关,一定要设置为:
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib:/usr/local/lib;export LD_LIBRARY_PATH
2 ORA-12505: TNS:listener does not currently know of SID given in connect descriptor
oracle@rac3:/home/oracle/python>python test.py 
Traceback (most recent call last):
  File "test.py", line 10, in ?
    connection=cx_Oracle.connect(username, userpwd, dsn) 
cx_Oracle.DatabaseError: ORA-12505: TNS:listener does not currently know of SID given in connect descriptor

oracle@rac3:/opt/oracle/11.2.0/alifpre/network/admin>cat tnsnames.ora 
# tnsnames.ora Network Configuration File: /opt/oracle/11.2.0/alifpre/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

yangdb =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.250.7.241 )(PORT = 1523))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = yangdb)
    )
  )
listener.ora 文件中
SID_LIST_LISTENER =
      (SID_LIST =
         (SID_DESC =
           (SID_NAME = PLSExtProc)
             (ORACLE_HOME = /opt/oracle/11.2.0/alifpre)
           (PROGRAM = extproc)
         )
        (SID_DESC =
          (GLOBAL_DBNAME = yang)
           (ORACLE_HOME = /opt/oracle/11.2.0/alifpre)
          (SID_NAME =yangdb)
         )
     )

  (GLOBAL_DBNAME = yang)与tnsnams.ora 文件中的tns连接名不一致导致,修改为yangdb,重新启动监听或者lsnrclt reload 即可
相关文章
|
22天前
|
关系型数据库 MySQL 数据库连接
python脚本:连接数据库,检查直播流是否可用
【10月更文挑战第13天】本脚本使用 `mysql-connector-python` 连接MySQL数据库,检查 `live_streams` 表中每个直播流URL的可用性。通过 `requests` 库发送HTTP请求,输出每个URL的检查结果。需安装 `mysql-connector-python` 和 `requests` 库,并配置数据库连接参数。
120 68
|
19天前
|
SQL Oracle 关系型数据库
Oracle数据库优化方法
【10月更文挑战第25天】Oracle数据库优化方法
26 7
|
19天前
|
Oracle 关系型数据库 数据库
oracle数据库技巧
【10月更文挑战第25天】oracle数据库技巧
22 6
|
19天前
|
存储 Oracle 关系型数据库
Oracle数据库优化策略
【10月更文挑战第25天】Oracle数据库优化策略
17 5
|
18天前
|
SQL Java 数据库连接
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率。本文介绍了连接池的工作原理、优势及实现方法,并提供了HikariCP的示例代码。
32 3
|
18天前
|
Java 数据库连接 数据库
深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能
在Java应用开发中,数据库操作常成为性能瓶颈。本文通过问题解答形式,深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能。文章介绍了连接池的优势、选择和使用方法,以及优化配置的技巧。
17 1
|
18天前
|
Java 数据库连接 数据库
Java连接池在数据库性能优化中的重要作用。连接池通过预先创建和管理数据库连接,避免了频繁创建和关闭连接的开销
本文深入探讨了Java连接池在数据库性能优化中的重要作用。连接池通过预先创建和管理数据库连接,避免了频繁创建和关闭连接的开销,显著提升了系统的响应速度和吞吐量。文章介绍了连接池的工作原理,并以HikariCP为例,展示了如何在Java应用中使用连接池。通过合理配置和优化,连接池技术能够有效提升应用性能。
33 1
|
21天前
|
SQL 关系型数据库 数据库连接
"Nacos 2.1.0版本数据库配置写入难题破解攻略:一步步教你排查连接、权限和配置问题,重启服务轻松解决!"
【10月更文挑战第23天】在使用Nacos 2.1.0版本时,可能会遇到无法将配置信息写入数据库的问题。本文将引导你逐步解决这一问题,包括检查数据库连接、用户权限、Nacos配置文件,并提供示例代码和详细步骤。通过这些方法,你可以有效解决配置写入失败的问题。
46 0
|
8天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
23 1
|
10天前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
26 4