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 Web框架Tornado运行和部署
Oct 19 Python
浅谈flask中的before_request与after_request
Jan 20 Python
Python数据处理numpy.median的实例讲解
Apr 02 Python
Python3爬取英雄联盟英雄皮肤大图实例代码
Nov 14 Python
对Python3+gdal 读取tiff格式数据的实例讲解
Dec 04 Python
python 检查文件mime类型的方法
Dec 08 Python
python super用法及原理详解
Jan 20 Python
Python中remove漏删和索引越界问题的解决
Mar 18 Python
python闭包与引用以及需要注意的陷阱
Sep 18 Python
python编写扎金花小程序的实例代码
Feb 23 Python
粗暴解决CUDA out of memory的问题
May 22 Python
Python matplotlib绘制条形统计图 处理多个实验多组观测值
Apr 21 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
强烈声明: 不要使用(include/require)_once
2013/06/06 PHP
win10环境PHP 7 安装配置【教程】
2016/05/09 PHP
老生常谈ThinkPHP中的行为扩展和插件(推荐)
2017/05/05 PHP
Vagrant(WSL)+PHPStorm+Xdebu 断点调试环境搭建
2019/12/13 PHP
CI框架简单分页类用法示例
2020/06/06 PHP
不用AJAX和IFRAME,说说真正意义上的ASP+JS无刷新技术
2008/09/25 Javascript
基于jquery的修改当前TAB显示标题的代码
2010/12/11 Javascript
jquery.post用法关于type设置问题补充
2014/01/03 Javascript
JavaScript中Number.MIN_VALUE属性的使用示例
2015/06/04 Javascript
jQuery插件制作的实例教程
2016/05/16 Javascript
js canvas实现适用于移动端的百分比仪表盘dashboard
2017/07/18 Javascript
nodejs简单读写excel内容的方法示例
2018/03/16 NodeJs
vue 动态表单开发方法案例详解
2019/12/02 Javascript
JavaScript单线程和任务队列原理解析
2020/02/04 Javascript
JavaScript如何判断对象有某属性
2020/07/03 Javascript
js实现日历
2020/11/07 Javascript
编写Python脚本来获取Google搜索结果的示例
2015/05/04 Python
Python面向对象特殊成员
2017/04/24 Python
python+pyqt实现12306图片验证效果
2017/10/25 Python
Python 查看文件的编码格式方法
2017/12/21 Python
解决Python正则表达式匹配反斜杠''\''问题
2019/07/17 Python
Django框架反向解析操作详解
2019/11/28 Python
将tf.batch_matmul替换成tf.matmul的实现
2020/06/18 Python
pytorch掉坑记录:model.eval的作用说明
2020/06/23 Python
python实现学生信息管理系统(精简版)
2020/11/27 Python
五分钟学会怎么用python做一个简单的贪吃蛇
2021/01/12 Python
UGG雪地靴德国官网:UGG德国
2016/11/19 全球购物
KIKO美国官网:意大利的平价彩妆品牌
2017/05/16 全球购物
英国最大最好的无人机商店:Drones Direct
2019/07/12 全球购物
这76道Java面试题及答案,祝你能成功通过面试
2016/04/16 面试题
企划经理的岗位职责
2013/11/17 职场文书
房屋继承公证书
2014/04/10 职场文书
小学生手册家长评语
2014/04/16 职场文书
城市轨道交通工程职业生涯规划书范文
2014/09/16 职场文书
平安建设汇报材料
2014/12/29 职场文书
车辆管理制度范本
2015/08/05 职场文书