目录
一、python建立数据库连接 (mysql+oracle)
二、建立光标+执行sq+关闭光标+关闭连接(oracle为例)
三、description获取表属性 # 获取表详情,字段名,长度,属性等
写在前面:
人生苦短,我用python。今天用2分钟时间一起来梳理下,python对数据库的操作,本文以oracle数据库为例。如果对你有用请点赞,收藏哦~以备不时之需。
一、python建立数据库连接 (mysql+oracle)
1、mysql
mysql登陆
基本操作:
登陆:mysql -uroot -h127.0.0.1 -P3306 -p
mysql -uroot -p(本机不用写host)
退出mysql:ctrl+z+回车,或者exit
端口号默认是3306,但是可以通过安装目录下的配置文件修改。
使用流程
- 引用API模块
- 获取与数据库的连接
- 执行sql语句与存储过程
- 关闭数据库连接
安装pymysql
python3 与MySQL 进行交互编程需要安装 pymysql 库,故首先使用如下命令安装pymysql
–>pip install pymysql
如果电脑中py2和py3共存的话,安装失败时请参考之前的博客安装方法
pymysql.connect()连接数据库函数
代码示例:
import pymysql
#打开数据库连接
conn = pymysql.connect('localhost',user = "root",passwd = "123456",db = "testdb")
#localhost为你的数据库地址
#root为你数据库的用户名
#123456为数据库密码
#testdb为数据库server名称
print (conn)
print (type(conn))
总结:
第一步:pip install pymysql 安装pymysql库,import引用pymysql库
第二步:建立数据库连接conn,打印连接信息。
效果:
2、oracle数据库
#导入cx_Oracle import cx_Oracle #建立conn连接 conn = cx_Oracle.connect('BI/123@10.110.11.11:1521/orcl')#用户名/密码@ip:port/实例名 # 换成自己的db数据 # BI是username # 123 是密码 # @后面是ip # 1521是端口 # orcl是service name
总结:
第一步:pip install cx_Oracle 安装cx_Oracle库,import引用cx_Oracle库
第二步:建立数据库连接conn,打印连接信息。方法与mysql一样,只是引用库不同而已。
二、建立光标+执行sq+关闭光标+关闭连接(oracle为例)
#建立光标
curs = conn.cursor()
#执行对应SQL sql = f"select * from SY2_CJBZGX_CPT where rownum<='{numline} ' order by 日期 desc"#当带有参数需在sql语句前面增加f curs.execute(sql) result = curs.fetchall()#获取全部返回值 #result = curs.fetchone()#获取单个返回值
........
#关闭光标 curs.close() # 关闭数据库连接 conn.close()
三、description获取表属性 # 获取表详情,字段名,长度,属性等
代码:
des=curs.description # 获取表详情,字段名,长度,属性等
print(des)
效果:
实际表字段:
四、将查询结果按字典的方式输出
代码:
for i in result:
list_list = list(i)
des=curs.description # 获取表详情,字段名,长度,属性等
print(des)
t = ",".join([item[0] for item in des])
table_head = t.split(',') # # 查询表列名 用,分割
dict_result = dict(zip(table_head, list_list)) # 打包为元组的列表 再转换为字典
list_result=[]
list_result.append(dict_result) # 将字典添加到list_result中
print(list_result,end='\n')
效果:
五、完整案例
代码:
#导入cx_Oracle
import cx_Oracle
#建立conn连接
conn = cx_Oracle.connect('BI/Zwbi@123@10.110.11.11:1521/orcl')#用户名/密码@ip:port/实例名
# 换成自己的db数据
# BI是username
# 123 是密码
# @后面是ip
# 1521是端口
# orcl是service name
#建立光标
curs = conn.cursor()
#获取返回的行数
numline=int(input("输入希望返回的行数:"))
#执行对应SQL
sql = f"select * from SY2_CJBZGX_CPT where rownum<='{numline} ' order by 日期 desc"#当带有参数需在sql语句前面增加f
curs.execute(sql)
result = curs.fetchall()#获取全部返回值
#result = curs.fetchone()#获取单个返回值
for i in result:
list_list = list(i)
des=curs.description # 获取表详情,字段名,长度,属性等
print(des)
t = ",".join([item[0] for item in des])
table_head = t.split(',') # # 查询表列名 用,分割
dict_result = dict(zip(table_head, list_list)) # 打包为元组的列表 再转换为字典
list_result=[]
list_result.append(dict_result) # 将字典添加到list_result中
print(list_result,end='\n')
#关闭游标
curs.close()
# 关闭数据库连接
conn.close()
效果: