Python连接多种数据库的⽅式
本次主要介绍3种数据库(MySQL、PostgreSQL、oracle)如何⽤Python连接。
⼀、MySQL
MySQL这⾥介绍三种Python的库来连接,分别是sqlalchemy、MySQLdb、PyMySQL。
1、sqlalchemy
sqlalchemy是python中著名的orm框架,通过这个框架可以不⽤关⼼sql语句,就能操作数据库。⼤⼤的提⾼开发效率。当然通过orm来操作数据库会执⾏很多的数据库冗余操作,降低程序的运⾏效率。
安装
直接使⽤pip安装。
pip install sqlalchemy或者easy install sqlalchemy
在Python3.6之后似乎使⽤MySQLdb不是很⽅便,索性就⽤pymysql了。
⽰例
from sqlalchemy import create_engine
## 地址为127.0.0.1,数据库名称为tipdm
engine = create_engine('mysql+pymysql://root:123456@127.0.0.1:3306/tipdm?charset=utf8')
data = pd.read_sql('select * from all_gzdata',con=engine)
2、MySQLdb
MySQLdb是⽤于Python链接Mysql数据库的接⼝,它实现了Python 数据库API规范V2.0,基于MySQL C API上建⽴的。
安装
直接使⽤pip安装,MySQLdb模块的名字在pip上叫MySQL-python。
pip install MySQL-python
常⽤函数
Python DB API 2.0 对事务提供了两个⽅法:
commit() 提交
rollback() 回滚
cursor⽤来执⾏命令的⽅法:
callproc(self, procname, args) ⽤来执⾏存储过程,接收的参数为存储过程名和参数列表,返回值为受影响的⾏数
execute(self, query, args) 执⾏单条sql语句,接收的参数为sql语句本⾝和使⽤的参数列表,返回值为受影响的⾏数
executemany(self, query, args) 执⾏单挑sql语句,但是重复执⾏参数列表⾥的参数,返回值为受影响的⾏数
nextset(self) 移动到下⼀个结果集
cursor⽤来接收返回值的⽅法:
fetchall(self) 接收全部的返回结果⾏
fetchmany(self, size=None) 接收size条返回结果⾏。如果size的值⼤于返回的结果⾏的数量,则会返回cursor.arraysize条数据
fetchone(self) 返回⼀条结果⾏
rowcount 这是⼀个只读属性,并返回执⾏execute() ⽅法后影响的⾏数
scroll(self, value, mode='relative') 移动指针到某⼀⾏;如果mode='relative',则表⽰从当前所在⾏移动value条,如果mode='absolute',则表⽰从结果集的第⼀⾏移动value条
⽰例
import MySQLdb as mdb
# 连接数据库
conn = t('localhost', 'root', 'root')
conn = t(host='127.0.0.1', port=3306, user='root', passwd='root', db='test', charset='utf8')# 可以使⽤关键字参数
config = {'host': '127.0.0.1','port': 3306,'user': 'root','passwd': 'root','db': 'test','charset': 'utf8'}# 可以使⽤字典进⾏连接参数的管理
conn = t(**config)
# 如果使⽤事务引擎,可以设置⾃动提交事务,或者在每次操作完成后⼿动提交事务
conn.autocommit(1) # conn.autocommit(True)
# 使⽤cursor()⽅法获取操作游标
cursor = conn.cursor()
try:
# 创建数据库
DB_NAME = 'test'
conn.select_db(DB_NAME)
#创建表
TABLE_NAME = 'user'
# 插⼊单条数据
sql = 'INSERT INTO user values("%d","%s")' %(1,"jack")
# 不建议直接拼接sql,占位符⽅⾯可能会出问题,execute提供了直接传值
value = [2,'John']
# 批量插⼊数据
values = []
for i in range(3, 20):
values.append((i,'kk'+str(i)))
# 查询数据条⽬
count = ute('SELECT * FROM %s' %TABLE_NAME)
print('total records: %d' %count)
print('total records:', wcount)
mysql下载链接# 获取表名信息
desc = cursor.description
print("%s %3s" % (desc[0][0], desc[1][0]))
# 查询⼀条记录
print('fetch one record:')
result = cursor.fetchone()
print(result)
print('id: %s,name: %s' %(result[0],result[1]))
# 查询多条记录
print('fetch five record:')
results = cursor.fetchmany(5)
for r in results:
print(r)
# 查询所有记录
# 重置游标位置,偏移量:⼤于0向后移动;⼩于0向前移动,mode默认是relative
# relative:表⽰从当前所在的⾏开始移动; absolute:表⽰从第⼀⾏开始移动
cursor.scroll(0,mode='absolute')
results = cursor.fetchall()
for r in results:
print(r)
cursor.scroll(-2)
results = cursor.fetchall()
for r in results:
print(r)
# 更新记录
# 删除记录
# 如果没有设置⾃动提交事务,则这⾥需要⼿动提交⼀次
connmit()
except:
import traceback
traceback.print_exc()
# 发⽣错误时会滚
finally:
# 关闭游标连接
cursor.close()
# 关闭数据库连接
conn.close()
3、PyMySQL
PyMySQL是⼀个纯Python写的MySQL客户端,它的⽬标是替代MySQLdb,可以在CPython、PyPy、IronPython和Jython环境下运⾏。
PyMySQL的性能和MySQLdb⼏乎相当,如果对性能要求不是特别的强,使⽤PyMySQL将更加⽅便。
PyMySQL的使⽤⽅法和MySQLdb⼏乎⼀样。
安装
pip install pymysql
⽰例
import os
import pymysql
import pandas as pd
# 读取数据1
os.chdir('E:/')
db = t('localhost','root','123456','tipdm',charset='gbk')
# host: 这个是ip地址,因为我这⾥是本地的,所以填127.0.0.1,也可以填localhost。
# user:⽤户名,如果你也是本地的,就填root好了
# passwd:这个是密码
# db:这个是数据库名
# port:这个是端⼝,本地的⼀般都是3306
# charset:这个是编码⽅式,要和你数据库的编码⽅式⼀致,要不会连接失败
data = pd.read_sql('select * from all_gzdata',con=db)
db.close() #关闭连接
# 读取数据2
try:
db = t('localhost','root','123456','tipdm',charset='gbk')
cursor = db.cursor() # 光标
# 这个是执⾏sql语句,返回的是影响的条数
data = ute('SELECT * FROM `all_gzdata`')
print(cursor.fetchone())
print(data)
cursor.close() # 关闭光标
except pymysql.Error as e:
print(e)
print('操作数据库失败')
finally:# 如果连接成功就要关闭数据库
if db:
db.close()
print(cursor.description)
new = dict(zip([x[0] for x in cursor.description],[x for x in cursor.fetchone()]))
print(new)
print(new['title'])
# 上⾯的只是⼀条数据的,如果是多条,就需要⽤到map函数
def new2dict(new):
return dict(zip([x[0] for x in cursor.description],[x for x in new]))
news_list = list(map(new2dict,cursor.fetchall()))
print(news_list)
⼆、PostgreSQL
PostgreSQL可以⽤Python psycopg2模块集成。 sycopg2是Python编程语⾔的PostgreSQL数据库的适配器。 其程序代码少,速度快,稳定。
安装
pip install psycopg2
⽰例
import psycopg2
import pandas as pd
con = t(database="969368", user="postgres", password="root", host="10.16.15.18", port="5432")
data = pd.read_sql('select * from mm_bill',con=con)
<_csv('11.csv')
data.ix[1,:]
三、oracle
⼯作中使⽤的是Oracle数据库,Python有⼀个模块cx_Oracle可以与Oracle相连。安装
要使⽤cx_Oracle,就要先下载。
pip install cx_Oracle
⽰例
import pandas as pd
import cx_Oracle #引⽤模块cx_Oracle
# select value from v$parameter where name like '%service_name%' ,查看服务名称
conn=t('dbcustadm/test928@10.16.9.28:1521/crmdb30') #连接数据库
data = pd.read_sql('select * from cparambase',con = conn) # 获取数据
conn.close() #关闭cursor
⽂章未经博主同意,禁⽌转载!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论