python与oracle
本文实例讲述了python连接oracle数据库的方法,分享给大家供大家参考。具体步骤如下:
一、首先下载驱动:(cx_Oracle)
http://www.python.net/crew/atuining/cx_Oracle/
不过要注意一下版本,根据你的情况加以选择。
二、安装:
首先配置oracle_home环境变量
执行那个exe安装程序就可以了,它会一个cx_Oracle.pyd到Libsite-packages目录下。
如果是linux,执行
python setup.py build
python setup.py install
三、执行一段测试程序:
import cx_Oracle
con = cx_Oracle.connect( "xjtu_test", "37343734","xjtu.world")
cursor = con.cursor()
cursor.close()
con.close()
里边connect中的3个参数从左到右分别是:user, pass, TNS。
那个TNS可以用Oracle客户端工具中的Net Configuration Assistant来配置。
四、具体的cx_Oracle API可以参考:
http://www.python.net/crew/atuining/cx_Oracle/html/cx_Oracle.html
五、示例:
>>> import cx_Oracle
>>> conn=cx_Oracle.connect ('scott/tiger@oratest')
>>> curs=conn.cursor ()
>>> sql='select * from emp'
>>> rr=curs.execute (sql)
>>> row=curs.fetchone()
>>> row
(7369, 'SMITH', 'CLERK', 7902, datetime.datetime(1980, 12, 17, 0, 0), 800.0, None, 20)
>>> while row:
(ID,NAME)=(row[0],row[1])
row=curs.fetchone ()
print ID,NAME
7369 SMITH
7499 ALLEN
7521 WARD
7566 JONES
7654 MARTIN
7698 BLAKE
7782 CLARK
7788 SCOTT
7839 KING
7844 TURNER
7876 ADAMS
7900 JAMES
7902 日常
7934 MILLER
如果使用windows平台,执行那段测试代码时你肯定遇到问题了,一般会有以下问题:
① import cx_Oracle 时报告找不到OCI.DLL:
到装了Oracle的机器上找一个,然后到Libsite-packages目录下就可以了。
② cx_Oracle.connect 时报告RuntimeError: Unable to acquire Oracle environment handle:
这个比较麻烦,按以下步骤来解决:(可能不需要所有的步骤,我没有确认,不过把以下步骤都执行了,确实问题就解决了)
首先,确认你是在控制台下边来执行这个python脚本的。而不是某些ide,例如:PyDev(它们似乎无法载入os的环境变量)。
其实,在本机安装Oracle(只安客户端工具就可以了)。
最后,添加以下环境变量:(我给出我的,换成你自己的路径就可以了)
ORACLE_HOME=D:OracleOra81
PATH=D:OracleOra81bin;
希望本文所述对大家的Python程序设计有所帮助。
② python自定义输入用户名和密码如何写到oracl数据库中
有很多小伙伴可能知道python不知道怎么让用户名和密码写到oracle数据中。接下来就让小编给大家解释说明一下操作方法
1.保证与oracle服务器版本统一。这是想要数据传送的首要必要的条件。
2.然后我们再找到python3 ,oracle服务器,oracle client统一使用64位或者32位。这里小编推荐大家使用64位以上的系统,因为64位以上的系统操作简单,比较稳定。
2.先解压缩instantclient-basic-linux.x64-11.2.0.4.0.zip,最后后解压缩instantclient-sdk-linux.x64-11.2.0.4.0.zip注意在这里解压的时候一定要解压到我们可以找到的地方。
3.进入目录instantclient_11_2,创建软链接ln -s libclntsh.so.11.1 libclntsh.so4.在刚刚解压得到的instantclient_11_2文件夹下新建network/admin
5.在刚刚创建的目录下创建network/admin创建文件tnsnames.ora,最后按照以下的模板进行调整就能得到一个完整的程序。模板如下(SERVICE_NAME请填写服务器SID)以上就是 Python写入到oracl数据库中的几个步骤,如果说对你有帮助,那么就点赞转发吧!
③ 如何用python更新oracle数据库
用python更新oracle数据库:
1. 要想使Python可以操作Oracle数据库,首先需要安装cx_Oracle包,可以通过下面的地址来获取安装包:cx-oracle.sourceforge.net/
2. 另外还需要oracle的一些类库,此时需要在运行python的机器上安装Oracle Instant Client软件包,可以通过下面地址获得technetwork/database/features/instant-client/index-097480.html
找到符合自己平台的包,然后安装,这里我使用的是rpm包,所以使用以下命令安装
$ sudo rpm -ivh oracle-instantclient11.2-basic-11.2.0.3.0-1.i386.rpm
装完毕后还需要设置一下环境变量,如下
$ export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/lib/oracle/11.2/client/lib
然后写update语句对表进行更新:
import cx_Oracle //导入链接oracle的库
conn = cx_Oracle.connect('fkong/[email protected]/orcl') //建立与orcl的连接
cursor = conn.cursor () //打开游标
cursor.execute ("update test set COL1='u' where ID=1") //执行更新
conn.commit() //提交结果
cursor.close (); //关闭游标
conn.close ();//关闭连接
④ python连接oracle数据库报出 ORA-12541: TNS: 无监听程序
方法一:
在oracle_home下找到lsnrctl.exe 输入 start
方法二
可能认不到实例名
在cmd下运行
set oracle_sid=自己数据库的实例名(大多数orcl)
网上还有很多解决办法
也许不见得管用,这种问题具体问题具体分析比较好。介绍的这2种您的机器还不行。就去修改一个TNSNAMES.ORA。
⑤ python3连接oracle报错
python3连接oracle报错
# -*- coding:utf-8 -*-
#!/usr/bin/env python
'''
Created on 2014年8月4日
@author: 188007
连接Oracle数据库的class
'''
import os
os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.ZHS16GBK'
import cx_Oracle
import sys
class Oracle:
'''
python access oracle helper tool class
'''
def __init__(self, ip,port,db,user,pwd):
self.ip = ip
self.port = port
self.db = db
self.user = user
self.pwd = pwd
def __GetConnect(self):
""" 得到连接信息 返回: conn.cursor() """
if not self.db:
raise(NameError,"没有设置数据库信息")
dsn=cx_Oracle.makedsn(self.ip,self.port,self.db)
self.conn=cx_Oracle.connect(self.user,self.pwd,dsn)
cur = self.conn.cursor()
if not cur:
raise(NameError,"连接数据库失败")
else:
return cur
def ExecQuery(self,sql):
""" 执行查询语句 返回的是一个包含tuple的list,list的元素是记录行,tuple的元素是每行记录的字段
调用示例:
oracle = Oracle('10.27.95.253','1561','GFDMS','GFITAPPS','GFITAPPS')
resList = oracle.ExecQuery("SELECT OBJID,NUMCODE,AREACODE,AREANAME,PROVCODE,PROVNAME,CITYCODE,CITYNAME,TOWNCODE,TOWNNAME,REMARK FROM GFDMS.THZONE ORDER BY NUMCODE")
for (AREANAME) in resList:
print str(AREANAME).decode('gb2312')
"""
try:
cur = self.__GetConnect()
cur.execute(sql)
resList = cur.fetchall()
#查询完毕后必须关闭连接
self.conn.close()
except Exception, err:
sys.exit(1)
return resList
def ExecNonQuery(self,sql):
""" 执行非查询语句
调用示例:
oracle.ExecNonQuery("insert into THZONE values('x','y')")
"""
try:
cur = self.__GetConnect()
cur.execute(sql)
self.conn.commit()
self.conn.close()
except Exception, err:
sys.exit(1)
# def main():
# # oracle = Oracle('10.27.95.253','1561','GFDMS','GFITAPPS','GFITAPPS')
# # #返回的是一个包含tuple的list,list的元素是记录行,tuple的元素是每行记录的字段
# # oracle.ExecNonQuery("insert into THZONE values('x','y')")
# oracle = Oracle('10.27.95.253','1561','GTEST','GTAPPS','GTAPPS')
# resList = oracle.ExecQuery("SELECT OBJID,NUMCODE,AREACODE,AREANAME,PROVCODE,PROVNAME,CITYCODE,CITYNAME,TOWNCODE,TOWNNAME,REMARK FROM GTEST.THZONE ORDER BY NUMCODE")
# for (AREANAME) in resList:
# print str(AREANAME).decode('utf-8')
#
# if __name__ == '__main__':
# main()
⑥ oracle怎么调用python代码
1、把python程序放到一个bat文件里面:python.bat [内容:start python clearlog.py]
2、在oracle里面创建JOB scheler
3、在JOB scheler 里面 调用 xxxx.bat文件
即可。
⑦ python 3.6 cx_Oracle.DatabaseError: DPI-1050
很明显,这里cx_Oracle依赖本机oracle客户端启动,原因是本机安装的客户端版本太低,查看PATH环境变量是否加入oracle客户端路径,没有的话可以在PATH前面手动添加一个更高版本的客户端,比如安装一个NavicatforOracle,,把文件夹下的instantclient_12_1目录路径加到PATH环境变量中,注意:是里面包含oci.dll,oraocci12.dll,oraociei12.dll的目录。
⑧ python连oracle: DPI-1047错误
python连接oracle的时候报错
DatabaseError: DPI-1047: Cannot locate a 64-bit Oracle Client library: “The specified mole could not be found”. See https://oracle.github.io/odpi/doc/installation.html#windows for help
解决方案
要求
①pycharm是64位
②oracle客户端是64位
③python是64位
接下来的操作,去oracle客户端安装目录找到三个文件,分别是
oci.dll、oraocci11.dll、oraociei11.dll
然后把这些文件复制到python的渣山安装目录site-packages下,重启工具就可以扰卜了如李中