楼主: CDA网校
903 0

[程序分享] python链接oracle数据库以及数据库的增删改查实例——CDA人工智能学院 [推广有奖]

管理员

已卖:189份资源

泰斗

2%

还不是VIP/贵宾

-

威望
3
论坛币
115387 个
通用积分
9881.2207
学术水平
268 点
热心指数
276 点
信用等级
243 点
经验
227729 点
帖子
6860
精华
19
在线时间
4366 小时
注册时间
2019-9-13
最后登录
2025-12-22

初级热心勋章

楼主
CDA网校 学生认证  发表于 2020-10-9 09:16:52 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
CDA人工智能学院致力于以优质的人工智能在线教育资源助力学员的DT职业梦想!课程内容涵盖数据分析机器学习深度学习人工智能tensorFlowPyTorch知识图谱等众多核心技术及行业案例,让每一个学员都可以在线灵活学习,快速掌握AI时代的前沿技术。PS:私信我即可获取《银牌会员》1个月免费试听机会

初次使用python链接oracle,所以想记录下我遇到的问题,便于向我这样初次尝试的朋友能够快速的配置好环境进入开发环节。

1.首先,python链接oracle数据库需要配置好环境。
我的相关环境如下:

1)python:Python 3.6.3 (v3.6.3:2c5fed8, Oct 3 2017, 17:26:49) [MSC v.1900 32 bit (Intel)] on win32

2)oracle:11.2.0.1.0 64bit。这个是server版本号,在链接oracle数据库的时候还需要oracle的客户端版,客户端版本的下载也要参考python的版本,python是32位的客户端下载也要用32位。

3)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),下载后直接安装运行就行了,他会有一个自检,如果没有通过就说明你的驱动版本没有下载对。

2.上面的工作做好之后,在刚才下载好的oracle客户端版本中找到下面三个文件:oci.dll、oraocci11.dll、oraociei11.dll,将这几个dll文件复制到

Python\Python36-32\Lib\site-packages文件夹中。

3.在python中输入:   
import cx_Oracle

没有报错的话说明驱动安装成功。

4.数据库连接操作:   
conn = cx_Oracle.connect('xzt/xzt@localhost/testdb')#这里的顺序是用户名/密码@oracleserver的ip地址/数据库名字
  cur = conn.cursor()
  sql = "SELECT * FROM DUAL"
  cur.execute(sql)
  cur.close()
  conn.commit()
  conn.close()

5.数据库查询:   
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 ()

6.数据库插入:   
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()

7案例:从某网站上面爬取彩票号码   
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'<li class="ball_red">(\d{2})</li>'
    reg2 = r'<li class="ball_blue">(\d{2})</li>'
    regqnumber = r'第 <font class="cfont2"><strong>(\d*)</strong></font>'
    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'上一期:<a href="(.*)" rel="external nofollow" target="_blank">'
    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)
上面的代码用了递归运算,循环读取彩票信息,可以一直读取到2003年第一期,由于使用的是递归,在性能上不是很好,代码非常吃内存,电脑内存不够的朋友就不要尝试了,容易死机。

0D04CBB8996CB009643B8D6FD844F0C0.jpg

关注“CDA人工智能学院”,回复“录播”获取更多人工智能精选直播视频!


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Oracle python 人工智能 以及数据 数据库

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-22 18:04