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入门教程之识别验证码
Mar 04 Python
python实现单线程多任务非阻塞TCP服务端
Jun 13 Python
Python实现购物程序思路及代码
Jul 24 Python
详解python中executemany和序列的使用方法
Aug 12 Python
Django contenttypes 框架详解(小结)
Aug 13 Python
让代码变得更易维护的7个Python库
Oct 09 Python
浅析python3字符串格式化format()函数的简单用法
Dec 07 Python
Django+zTree构建组织架构树的方法
Aug 21 Python
python之pymysql模块简单应用示例代码
Dec 16 Python
python数据类型可变不可变知识点总结
Mar 06 Python
使用python自动追踪你的快递(物流推送邮箱)
Mar 17 Python
Python pytesseract验证码识别库用法解析
Jun 29 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
农民和部队如何穿矿
2020/03/04 星际争霸
PHP管理依赖(dependency)关系工具 Composer 安装与使用
2014/08/18 PHP
在Mac OS的PHP环境下安装配置MemCache的全过程解析
2016/02/15 PHP
ThinkPHP下表单令牌错误与解决方法分析
2017/05/20 PHP
Yii2框架中一些折磨人的坑
2019/12/15 PHP
用 Javascript 验证表单(form)中的单选(radio)值
2009/09/08 Javascript
一个JavaScript操作元素定位元素的实例
2014/10/29 Javascript
Jquery效果大全之制作电脑健康体检得分特效附源码下载
2015/11/02 Javascript
SublimeText自带格式化代码功能之reindent
2015/12/27 Javascript
Angular ng-repeat遍历渲染完页面后执行其他操作详细介绍
2016/12/13 Javascript
从零学习node.js之express入门(六)
2017/02/25 Javascript
zTree获取当前节点的下一级子节点数实例
2017/09/05 Javascript
微信小程序实现animation动画
2018/01/26 Javascript
node实现登录图片验证码的示例代码
2018/04/20 Javascript
在Express中提供静态文件的实现方法
2019/10/17 Javascript
JavaScript 类的封装操作示例详解
2020/05/16 Javascript
js异步接口并发数量控制的方法示例
2020/11/22 Javascript
vue-cli 3如何使用vue-bootstrap-datetimepicker日期插件
2021/02/20 Vue.js
用Python实现读写锁的示例代码
2018/11/05 Python
Python多线程threading模块用法实例分析
2019/05/22 Python
利用HTML5绘制点线面组成的3D图形的示例
2015/05/12 HTML / CSS
Reebok俄罗斯官方网上商店:购买锐步运动服装和鞋子
2016/09/26 全球购物
应用心理学个人的求职信
2013/12/08 职场文书
金融专业大学生职业生涯规划范文
2014/01/16 职场文书
中年人生感言
2014/02/04 职场文书
2014年三八妇女节活动总结
2014/03/01 职场文书
建筑安全员岗位职责
2014/03/13 职场文书
商务英语专业大学生职业生涯规划书
2014/09/14 职场文书
机关作风建设工作总结
2014/10/23 职场文书
公司文体活动总结
2015/05/07 职场文书
党小组考察意见
2015/06/02 职场文书
2016秋季校长开学典礼致辞
2015/11/26 职场文书
解决Pytorch半精度浮点型网络训练的问题
2021/05/24 Python
Python3接口性能测试实例代码
2021/06/20 Python
使用CSS实现小三角边框原理解析
2021/11/07 HTML / CSS
Java 深入探究讲解简单工厂模式
2022/04/07 Java/Android