pydbclib是一个通用的python关系型数据库操作工具包,使用统一的接口操作各种关系型数据库(如 oracle、mysql、postgres、hive、impala等)进行增删改查,它是对各个python数据库连接驱动包(如sqlalchemy、pymysql、cx_Oracle、pyhive、pyodbc、impala等)的封装,依照python最简原则SQL占位符统一成 ':[name]' 这一种形式,这点和sqlalchemy是一样的
安装
pip3 install pydbclib
简单使用
看下简单的查询示例
from pydbclib import connect # 使用with上下文,可以自动提交,自动关闭连接 with connect("sqlite:///:memory:") as db: db.execute('create table foo(a integer, b varchar(20))') # 统一使用':[name]'形式的SQL的占位符 db.execute("insert into foo(a,b) values(:a,:b)", [{"a": 1, "b": "one"}]*4) print(db.read("select * from foo").get_one()) print(db.read("select * from foo").get_all()) print(db.read("select * from foo").to_df()) db.get_table("foo").insert({"a": 2, "b": "two"}) print(db.get_table("foo").find_one({"a": 2})) print(db.get_table("foo").find().get_all()) print(db.get_table("foo").find().to_df())
查询结果记录是以字典形式展现,向库里写入记录也是字典形式,如果要使用原生元祖形式,查询函数read里添加as_dict=False参数
接口文档
数据库连接,更多常用数据库连接方式参考文章结尾
# connect函数有个driver参数决定你是通过哪个数据库驱动包去连接的 # driver参数默认值是sqlalchemy,即通过sqlalchemy驱动包连接数据库 > db = pydbclib.connect("sqlite:///:memory:") > db = pydbclib.connect(":memory:", driver='sqlite3') # 也可以传入驱动包连接对象 > import sqlite3 > db = pydbclib.connect(driver=sqlite3.connect(":memory:")) > from sqlalchemy import create_engine > db = pydbclib.connect(driver=create_engine("sqlite:///:memory:"))
原生SQL接口
1. 使用execute方法执行SQL,和各数据库连接包基本一致,不同点是它既可以单条执行,也可以批量执行(相当于executemany),另外该方法的SQL占位符是':[name]'形式
> record = {"a": 1, "b": "one"} > db.execute('create table foo(a integer, b varchar(20))') # 插入单条记录,结果返回影响行数 > db.execute("insert into foo(a,b) values(:a,:b)", record) 1 # 插入多条记录 > db.execute("insert into foo(a,b) values(:a,:b)", [record, record]) 2
2. 查询数据
# 查询结果只返回一条记录 > db.read_one("select * from foo") {'a': 1, 'b': 'one'} #read返回迭代器类型,用get方法获取前几条记录,使用map对每条记录进行数据清洗 > db.read("select * from foo").map(lambda x: {f"foo.{k}": v for k,v in x.items()}).get(2) # as_dict=False返回原生元祖记录 > db.read("select * from foo", as_dict=False).get(2) [(1, 'one'), (1, 'one')] # 也可以直接for遍历 > for r in db.read("select * from foo"): ... print(r) ... {'a': 1, 'b': 'one'} {'a': 1, 'b': 'one'} {'a': 1, 'b': 'one'} # 转换成pandas dataframe对象, 前提已经安装了pandas > db.read("select * from foo").to_df() a b 0 1 one 1 1 one 2 1 one
3. 提交、回滚、关闭连接
> db.rollback() > db.commit() > db.close()
表级别操作的SQL接口封装
1. 插入记录
# 插入单条和插入多条,输入参数字典的键值必须和表中字段同名 > db.get_table("foo").insert({"a": 1, "b": "one"}) 1 > db.get_table("foo").insert([{"a": 1, "b": "one"}]*10) 10
2. 查询记录
# 查询字段a=1第一条记录 > db.get_table("foo").find_one({"a": 1}) {'a': 1, 'b': 'one'} # 也可以直接写成sql条件表达式,其他接口的条件参数类似都可以是表达式 > db.get_table("foo").find_one("a=1") {'a': 1, 'b': 'one'} # 查询字段a=1所有记录,find返回迭代器对象同上面read方法 > db.get_table("foo").find({"a": 1}).get_all() [{'a': 1, 'b': 'one'},...{'a': 1, 'b': 'one'}]
3. 更新记录
# 将a=1那条记录的b字段值更新为"first" > db.get_table("foo").update({"a": 1}, {"b": "first"}) 11 > db.get_table("foo").find({"a": 1}).get_one() {'a': 1, 'b': 'first'}
4. 删除记录
# 将a=1那条记录删除 > db.get_table("foo").delete({"a": 1}) 11 > db.get_table("foo").find({"a": 1}).get_all() []
常用数据库连接
1. Common Driver
# 使用普通数据库驱动连接,driver参数指定驱动包名称 # 例如pymysql包driver='pymysql',connect函数其余的参数和driver参数指定的包的创建连接参数一致 # 连接mysql db = pydbclib.connect(user="user", password="password", database="test", driver="pymysql") # 连接oracle db = pydbclib.connect('user/password@local:1521/xe', driver="cx_Oracle") # 通过odbc方式连接 db = pydbclib.connect('DSN=mysqldb;UID=user;PWD=password', driver="pyodbc") # 通过已有驱动连接方式连接 import pymysql con = pymysql.connect(user="user", password="password", database="test") db = pydbclib.connect(driver=con)
2. Sqlalchemy Driver
# 使用Sqlalchemy包来连接数据库,drvier参数默认为'sqlalchemy' # 连接oracle db = pydbclib.connect("oracle://user:password@local:1521/xe") # 连接mysql db = pydbclib.connect("mysql+pyodbc://:@mysqldb") # 通过已有engine连接 from sqlalchemy import create_engine engine = create_engine("mysql+pymysql://user:password@localhost:3306/test") db = pydbclib.connect(driver=engine)
使用过程中有任何疑问,欢迎评论交流
项目地址pydbclib
以上就是python通用数据库操作工具 pydbclib的使用简介的详细内容,更多关于python 数据库操作工具pydbclib的资料请关注其它相关文章!
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 中国武警男声合唱团《辉煌之声1天路》[DTS-WAV分轨]
- 紫薇《旧曲新韵》[320K/MP3][175.29MB]
- 紫薇《旧曲新韵》[FLAC/分轨][550.18MB]
- 周深《反深代词》[先听版][320K/MP3][72.71MB]
- 李佳薇.2024-会发光的【黑籁音乐】【FLAC分轨】
- 后弦.2012-很有爱【天浩盛世】【WAV+CUE】
- 林俊吉.2012-将你惜命命【美华】【WAV+CUE】
- 晓雅《分享》DTS-WAV
- 黑鸭子2008-飞歌[首版][WAV+CUE]
- 黄乙玲1989-水泼落地难收回[日本天龙版][WAV+CUE]
- 周深《反深代词》[先听版][FLAC/分轨][310.97MB]
- 姜育恒1984《什么时候·串起又散落》台湾复刻版[WAV+CUE][1G]
- 那英《如今》引进版[WAV+CUE][1G]
- 蔡幸娟.1991-真的让我爱你吗【飞碟】【WAV+CUE】
- 群星.2024-好团圆电视剧原声带【TME】【FLAC分轨】