日常工作中,如果有数据库权限,那么在oracle中提取数据、在Python中处理是比较方便的。Python也提供了一个库专门操纵数据库。今天就专门来讲讲如何在Python中操作数据库。
准备工作
需要工具:oracle、PL/SQL、Python
import cx_Oracle
如果用anaconda prompt直接安装的话,可能会出现错误。最好在网站cx-Oracle下载对应版本(我下载的如下):
下载好之后,直接点击安装包按照提示安装即可。然后在anaconda里import。
SQL语言
先来复习一下几个简单的sql语句吧:
select * from table1 #查询table1的所有数据
create table test_table( name varchar(20), score number) #创建表test_table,包含name、score两列
insert into test_table(name,score) values('zoe',80) #插入一行数据
连接&操作数据库连接数据库
import cx_Oracle
import os
os.environ['NLS_LANG']='SIMPLIFIED CHINESE_CHINA.UTF8' #设置语言环境
db = cx_Oracle.connect('username','password','database') #连接数据库 用户名、密码、数据库名
cursor = db.cursor()
connect里填的,如下:创建表
create_table = """
create table py_table(
name varchar(20),
score number
)
""" #字符串里写SQL语句,用三个双引号括起来
create_flag = cursor.execute(create_table) #执行该SQL语句
运行完这两句,可以在数据库里看到新的表(如果没有,可能要刷新或者重启一下数据库)。插入数据
insert_data1 = """
insert into py_table(name,score) values('zoe',80)
"""
cursor.execute(insert_data1) #执行SQL语句
db.commit() #提交插入多条数据
scores = {
'Tom':100,
'Lily':60,
'Emily':85
}
#第一种 循环
for i in scores.items(): #遍历scores字典的键、值
cursor.execute('insert into py_table(name,score) values(:1,:2)',i) #i是一个元组,包含2个元素
#目前查到的方法,只能把所有列名写出来,然后:1、:2、、、、传入数据。
db.commit() #提交执行
#第二种 多条插入
scores1 = [(i,n) for i,n in scores.items()]
cursor.executemany('insert into py_table values(:1,:2)',scores1) # scores1是列表,里面是元组
db.commit() #提交执行
用executemany的速度会比第一种循环的要快,特别是数据多的时候。查询数据
sql1 = cursor.execute('select * from py_table') #查询数据
data1 = pd.DataFrame(sql1.fetchall()) #fetchall为取所有数据
data2 = sql1.fetchmany(10) #取10条数据绑定变量查询
有时候查询的条件是变化的,就需要用到绑定变量。
#查询zoe的数据
sql = cursor.execute("""select * from py_table where name=:name""",name='zoe') #:name为绑定变量
data = sql.fetchall()
#in查询
sql = cursor.execute("""select * from py_table where name in (:1,:2,:3)""",['zoe','Tom','Lily'])
data = sql.fetchall()
今天的连接Oracle数据库学会了吗?当然还有连接Mysql数据库,不过使用的库不一样,大家可以自行百度。
用Python插入数据库的时候,一定要注意数据的格式,如果与Oracle表的字段格式不匹配,就会出错。
不过使用Python连接数据库,最大的用处还是能方便在数据库查询数据,并且直接在Python中编程处理清洗了。
专栏列表