您现在的位置是:首页 > 技术教程 正文

python--连接oracle数据库

admin 阅读: 2024-03-26
后台-插件-广告管理-内容页头部广告(手机)

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/#pyhook
        • 4.在使用python连接时,需要注意以下点:

前言

在进行数据库连接之前,一般都需要导入依赖的库,通过专门的库去处理对应的数据库连接,所以没安装对应的处理库的话,需要先进行安装、再导入,导入后即可正常使用。

一、安装cx_Oracle

cx_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文件夹中。

二、导入库

代码如下(示例):

import cx_Oracle
  • 1

三、数据库操作实例

3.1 连接

import cx_Oracle conn = cx_Oracle.connect('xzt/xzt@localhost/testdb')#这里的顺序是用户名/密码@oracleserver的ip地址/数据库名字 cursor = conn.cursor() print('连接数据库成功!') sql = "select * from student" all = cursor.execute(sql) print(all.fetchall())
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

3.2数据库查询

import cx_Oracle conn = cx_Oracle.connect('xzt/xzt@localhost/testdb') cursor = conn.cursor () cursor.execute ("SELECT * FROM STUDENT_TB") rows = cursor.fetchall() #得到所有数据集 for row in rows: 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): row = cursor.fetchone() #逐行得到数据集 if row == None: break print("%d, %s, %s, %s" % (row[0], row[1], row[2], row[3])) print("Number of rows returned: %d" % cursor.rowcount) cursor.close () conn.close ()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

3.3数据库插入

import cx_Oracle conn = cx_Oracle.connect('xzp/xzp@localhost/testdb') cursor = conn.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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

3.4 实例从某网站上面爬取彩票号码

import re import urllib import cx_Oracle import urllib.request def getHtml(url): page = urllib.request.urlopen(url) html= page.read() return html def getNumber(html): reg = r'
  • (\d{2})
  • '
    reg2 = r'
  • (\d{2})
  • '
    regqnumber = r'第 (\d*)' number = re.compile(reg) numberblue = re.compile(reg2) qnumber = re.compile(regqnumber) numberlist = re.findall(number,html.decode('gbk')) numberblue = re.findall(numberblue,html.decode('gbk')) qnum = re.findall(qnumber,html.decode('gbk')) for number in numberblue: numberlist.append(number) for n in qnum: numberlist.append(n) print(numberlist) return numberlist #将查询到的号码入库 def RecodeToOracle(list): conn = cx_Oracle.connect('xzp/xzp@localhost/testdb.domain') cur = conn.cursor() sql = "INSERT 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()#记得要关闭会话 def Geturl(html): reg = r'上一期:' url = re.compile(reg) urllist = re.findall(url,html.decode('gbk')) if len(urllist)!=0: print(urllist[0]) if urllist[0].index('http:')<0: urllist[0]='http:'+urllist[0] htmlbefore = getHtml(urllist[0]) # print(htmlbefore) numberlist = getNumber(htmlbefore) print(len(numberlist)) RecodeToOracle(numberlist) print(numberlist) Geturl(htmlbefore) else: return str1 = '网站地址' html1 = getHtml(str1) RecodeToOracle(getNumber(html1)) Geturl(html1)
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57

    四、异常

    4.1、运行时,出现连接数据库失败:DatabaseError:DPI-1047

    在这里插入图片描述

    解决连接失败问题

    1、查看Oracle的版本号
    #linux下查询 sqlplus / as sysdba select * from v$version;
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    2、进入官网,下载对应Oracle版本

    https://www.oracle.com/database/technologies/instant-client/winx64-64-downloads.html
    在这里插入图片描述
    将下载的包解压,添加到环境变量

    3.下载cx_Oracle包:https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyhook

    ctrl+f 搜索: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
    • 1

    在这里插入图片描述
    打开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安装根目录下

    标签:
    声明

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    在线投稿:投稿 站长QQ:1888636

    后台-插件-广告管理-内容页尾部广告(手机)
    关注我们

    扫一扫关注我们,了解最新精彩内容

    搜索