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编程实现语音控制电脑
Apr 01 Python
python中使用xlrd、xlwt操作excel表格详解
Jan 29 Python
Python实现telnet服务器的方法
Jul 10 Python
在Django的模板中使用认证数据的方法
Jul 23 Python
Python的Socket编程过程中实现UDP端口复用的实例分享
Mar 19 Python
详解python调度框架APScheduler使用
Mar 28 Python
Python实现将HTML转换成doc格式文件的方法示例
Nov 20 Python
python操作excel的方法(xlsxwriter包的使用)
Jun 11 Python
python3 打开外部程序及关闭的示例
Nov 06 Python
python笔记_将循环内容在一行输出的方法
Aug 08 Python
Pytorch 定义MyDatasets实现多通道分别输入不同数据方式
Jan 15 Python
Python中的np.argmin()和np.argmax()函数用法
Jun 02 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中如何判断AJAX提交的数据
2012/02/05 PHP
php遍历目录与文件夹的多种方法详解
2013/11/14 PHP
php小技巧之过滤ascii控制字符
2014/05/14 PHP
初识PHP
2014/09/28 PHP
php实现约瑟夫问题的方法小结
2015/03/23 PHP
php实现base64图片上传方式实例代码
2017/02/22 PHP
DD_belatedPNG,IE6下PNG透明解决方案(国外)
2010/12/06 Javascript
jQuery EasyUI API 中文文档 - EasyLoader 加载器
2011/09/29 Javascript
JavaScript中按位“异或”运算符使用介绍
2014/03/14 Javascript
window.location不跳转的问题解决方法
2014/04/17 Javascript
JQuery实现当鼠标停留在某区域3秒后自动执行
2014/09/09 Javascript
JavaScript常用验证函数实例汇总
2014/11/25 Javascript
jQuery+CSS3实现3D立方体旋转效果
2015/11/10 Javascript
JavaScript设计模式初探
2016/01/07 Javascript
JavaScript职责链模式概述
2016/09/17 Javascript
将json转换成struts参数的方法
2016/11/08 Javascript
jQuery和CSS仿京东仿淘宝列表导航菜单
2017/01/04 Javascript
js实现登录框鼠标拖拽效果
2017/03/09 Javascript
jQuery插件HighCharts绘制简单2D柱状图效果示例【附demo源码】
2017/03/21 jQuery
js实现录音上传功能
2019/11/22 Javascript
Python卸载模块的方法汇总
2016/06/07 Python
Python实现调用另一个路径下py文件中的函数方法总结
2018/06/07 Python
解决pyttsx3无法封装的问题
2018/12/24 Python
Python scipy的二维图像卷积运算与图像模糊处理操作示例
2019/09/06 Python
python实现npy格式文件转换为txt文件操作
2020/07/01 Python
浅析Python 简单工厂模式和工厂方法模式的优缺点
2020/07/13 Python
Python全局变量与global关键字常见错误解决方案
2020/10/05 Python
css3 图片圆形显示 如何CSS将正方形图片显示为圆形图片布局
2014/10/10 HTML / CSS
中国双语服务优势的在线购票及活动平台:247tickets
2018/10/26 全球购物
爱普生美国官网:Epson美国
2018/11/05 全球购物
好的自荐信包括什么内容
2013/11/07 职场文书
金融管理应届生求职信
2014/02/20 职场文书
保护环境倡议书300字
2014/05/19 职场文书
反对四风自我剖析材料
2014/10/07 职场文书
Spring Boot 使用 Spring-Retry 进行重试框架
2022/04/24 Java/Android
MySQL事务的ACID特性以及并发问题方案
2022/07/15 MySQL