
python--连接oracle数据库前言一、安装cx_Oracle二、导入库三、数据库操作实例3.1 连接3.2数据库查询3.3数据库插入3.4 实例从某网站上面爬取彩票号码四、异常4.1、运行时出现连接数据库失败:DatabaseError:DPI-1047解决连接失败问题1、查看Oracle的版本号2、进入官网下载对应Oracle版本3.下载cx_Oracle包:https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyhook4.在使用python连接时需要注意以下点前言在进行数据库连接之前一般都需要导入依赖的库通过专门的库去处理对应的数据库连接所以没安装对应的处理库的话需要先进行安装、再导入导入后即可正常使用。一、安装cx_Oraclecx_Oracle:python链接oracle的驱动包这个需要自己安装https://pypi.python.org/pypi/cx_Oracle/5.3在这个网址中下载对应的驱动下载驱动的时候一定要选好对应的版本我的python是3.6的32位版本所以在下载驱动的时候也要选择对应的版本我选择的版本是cx_Oracle-5.3-11g.win32-py3.6.exe (md5)下载后直接安装运行就行了他会有一个自检如果没有通过就说明你的驱动版本没有下载对。在刚才下载好的oracle客户端版本中找到下面三个文件oci.dll、oraocci11.dll、oraociei11.dll将这几个dll文件复制到Python\Python36-32\Lib\site-packages文件夹中。二、导入库代码如下示例importcx_Oracle三、数据库操作实例3.1 连接importcx_Oracle conncx_Oracle.connect(xzt/xztlocalhost/testdb)#这里的顺序是用户名/密码oracleserver的ip地址/数据库名字cursorconn.cursor()print(连接数据库成功)sqlselect * from studentallcursor.execute(sql)print(all.fetchall())3.2数据库查询importcx_Oracle conncx_Oracle.connect(xzt/xztlocalhost/testdb)cursorconn.cursor()cursor.execute(SELECT * FROM STUDENT_TB)rowscursor.fetchall()#得到所有数据集forrowinrows:print(%d, %s, %s, %s%(row[0],row[1],row[2],row[3]))#python3以上版本中print()要加括号用了print(Number of rows returned: %d%cursor.rowcount)cursor.execute(SELECT * FROM STUDENT_TB)while(True):rowcursor.fetchone()#逐行得到数据集ifrowNone:breakprint(%d, %s, %s, %s%(row[0],row[1],row[2],row[3]))print(Number of rows returned: %d%cursor.rowcount)cursor.close()conn.close()3.3数据库插入importcx_Oracle conncx_Oracle.connect(xzp/xzplocalhost/testdb)cursorconn.cursor()cursor.execute(CREATE TABLE INSERTTEST(ID INT, C1 VARCHAR(50), C2 VARCHAR(50), C3 VARCHAR(50)))cursor.execute(INSERT INTO INSERTTEST (ID, COL1, COL2, COL3)VALUES(1213412, asdfa, ewewe, sfjgsfg))cursor.execute(INSERT INTO INSERTTEST (ID, COL1, COL2, COL3)VALUES(12341, ashdfh, shhsdfh, sghs))cursor.execute(INSERT INTO INSERTTEST (ID, COL1, COL2, COL3)VALUES(123451235, werwerw, asdfaf, awew))conn.commit()#这里一定要commit才行要不然数据是不会插入的cursor.close()conn.close()3.4 实例从某网站上面爬取彩票号码importreimporturllibimportcx_Oracleimporturllib.requestdefgetHtml(url):pageurllib.request.urlopen(url)htmlpage.read()returnhtmldefgetNumber(html):regrli classball_red(\d{2})/lireg2rli classball_blue(\d{2})/liregqnumberr第 font classcfont2strong(\d*)/strong/fontnumberre.compile(reg)numberbluere.compile(reg2)qnumberre.compile(regqnumber)numberlistre.findall(number,html.decode(gbk))numberbluere.findall(numberblue,html.decode(gbk))qnumre.findall(qnumber,html.decode(gbk))fornumberinnumberblue:numberlist.append(number)forninqnum:numberlist.append(n)print(numberlist)returnnumberlist#将查询到的号码入库defRecodeToOracle(list):conncx_Oracle.connect(xzp/xzplocalhost/testdb.domain)curconn.cursor()sqlINSERT INTO SSQ (REDNUM1,REDNUM2,REDNUM3,REDNUM4,REDNUM5,REDNUM6,BLUENUM,QNUMBER) VALUES (%s,%s,%s,%s,%s,%s,%s,%s)%(list[0],list[1],list[2],list[3],list[4],list[5],list[6],list[7])cur.execute(sql)cur.close()conn.commit()#这里一定要提交要不然是没有办法将数据入库的conn.close()#记得要关闭会话defGeturl(html):regr上一期a href(.*) target_blankurlre.compile(reg)urllistre.findall(url,html.decode(gbk))iflen(urllist)!0:print(urllist[0])ifurllist[0].index(http:)0:urllist[0]http:urllist[0]htmlbeforegetHtml(urllist[0])# print(htmlbefore)numberlistgetNumber(htmlbefore)print(len(numberlist))RecodeToOracle(numberlist)print(numberlist)Geturl(htmlbefore)else:returnstr1网站地址html1getHtml(str1)RecodeToOracle(getNumber(html1))Geturl(html1)四、异常4.1、运行时出现连接数据库失败:DatabaseError:DPI-1047解决连接失败问题1、查看Oracle的版本号#linux下查询 sqlplus / as sysdba select * from v$version;2、进入官网下载对应Oracle版本https://www.oracle.com/database/technologies/instant-client/winx64-64-downloads.html将下载的包解压添加到环境变量3.下载cx_Oracle包:https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyhookctrlf 搜索cx_Oracle进入选择匹配python版本的包这里我的python版本是3.6 64位cmd进入下载cx_Oracle-8.1.0-cp36-cp36m-win_amd64.whl的目录以下是我本地目录应修改成你自己的下载目录安装最新下载的包pip install cx_Oracle-8.1.0-cp36-cp36m-win_amd64.whl打开oracle版本的解压包进入解压后的目录C:\work\instantclient-basic-windows.x64-12.2.0.1.0\instantclient_12_2换成你本地的目录这里是我本地的把所有的.dll文件全部拷贝到python的根目录拷贝到目录如下4.在使用python连接时需要注意以下点1、需要下载已安装的oracle数据库对应的版本2、需要下载与python版本对应的cx_Oracle包3、需要把oracle版本的ddl文件放置python安装根目录下