python通用数据库操作工具 pydbclib的使用简介


Posted in Python onDecember 21, 2020

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的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
删除目录下相同文件的python代码(逐级优化)
May 25 Python
python字符串替换示例
Apr 24 Python
python网络编程学习笔记(六):Web客户端访问
Jun 09 Python
python修改注册表终止360进程实例
Oct 13 Python
Python实现从百度API获取天气的方法
Mar 11 Python
Python实现的彩票机选器实例
Jun 17 Python
python的else子句使用指南
Feb 27 Python
Python实现的爬虫功能代码
Jun 24 Python
用Python识别人脸,人种等各种信息
Jul 15 Python
python库matplotlib绘制坐标图
Oct 18 Python
Python tkinter三种布局实例详解
Jan 06 Python
python 如何用map()函数创建多线程任务
Apr 07 Python
Python 多进程原理及实现
Dec 21 #Python
python-图片流传输的思路及示例(url转换二维码)
Dec 21 #Python
python 用pandas实现数据透视表功能
Dec 21 #Python
python 生成正态分布数据,并绘图和解析
Dec 21 #Python
python statsmodel的使用
Dec 21 #Python
Python 实现集合Set的示例
Dec 21 #Python
Python 实现二叉查找树的示例代码
Dec 21 #Python
You might like
解析PHP跨站刷票的实现代码
2013/06/18 PHP
js的闭包的一个示例说明
2008/11/18 Javascript
jquery cookie插件代码类
2009/05/26 Javascript
页面只有一个text的时候,回车自动submit的解决方法
2010/08/12 Javascript
JavaScript EasyPager 分页函数
2011/05/25 Javascript
解析JavaScript中的标签语句
2013/06/19 Javascript
关于Javascript与iframe的那些事儿
2013/07/04 Javascript
JS案例分享之金额小写转大写
2014/05/15 Javascript
javascript原生和jquery库实现iframe自适应高度和宽度
2014/07/18 Javascript
express的中间件cookieParser详解
2014/12/04 Javascript
JS网页在线获取鼠标坐标值的方法
2015/02/28 Javascript
简单的jQuery入门指引
2015/07/28 Javascript
详细谈谈AngularJS的子级作用域问题
2016/09/05 Javascript
javascript实现的左右无缝滚动效果
2016/09/19 Javascript
AngularJS控制器controller给模型数据赋初始值的方法
2017/01/04 Javascript
JavaScript页面倒计时功能完整示例
2019/05/15 Javascript
vue+elementUi图片上传组件使用详解
2019/08/20 Javascript
javascript随机变色实例代码
2019/10/15 Javascript
[03:18]DOTA2亚洲邀请赛小组赛第一日 RECAP赛事回顾
2015/01/30 DOTA
python使用正则表达式检测密码强度源码分享
2014/06/11 Python
python基础教程之缩进介绍
2014/08/29 Python
python中查看变量内存地址的方法
2015/05/05 Python
详解Python文本操作相关模块
2017/06/22 Python
Python Django 添加首页尾页上一页下一页代码实例
2019/08/21 Python
python网络编程:socketserver的基本使用方法实例分析
2020/04/09 Python
吉力贝官方网站:Jelly Belly
2019/03/11 全球购物
岗位职责定义及内容
2013/11/08 职场文书
电子商务专业学生的自我鉴定
2013/11/28 职场文书
租房协议书范本
2014/04/09 职场文书
做一个有道德的人活动方案
2014/08/25 职场文书
支教个人总结
2015/03/04 职场文书
考勤制度通知
2015/04/25 职场文书
污水处理保证书
2015/05/09 职场文书
CSS 文字装饰 text-decoration & text-emphasis 详解
2021/04/06 HTML / CSS
Go语言实现Base64、Base58编码与解码
2021/07/26 Golang
详解gantt甘特图可拖拽、编辑(vue、react都可用 highcharts)
2021/11/27 Vue.js