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 相关文章推荐
phpsir 开发 一个检测百度关键字网站排名的python 程序
Sep 17 Python
python开发之list操作实例分析
Feb 22 Python
python3利用tcp实现文件夹远程传输
Jul 28 Python
pandas筛选某列出现编码错误的解决方法
Nov 07 Python
django 微信网页授权认证api的步骤详解
Jul 30 Python
Python使用百度翻译开发平台实现英文翻译为中文功能示例
Aug 08 Python
Python3实现mysql连接和数据框的形成(实例代码)
Jan 17 Python
浅谈SciPy中的optimize.minimize实现受限优化问题
Feb 29 Python
python继承threading.Thread实现有返回值的子类实例
May 02 Python
PyCharm中如何直接使用Anaconda已安装的库
May 28 Python
Python insert() / append() 用法 Leetcode实战演示
Mar 31 Python
python 使用pandas读取csv文件的方法
Dec 24 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
上海牌131型七灯四波段四喇叭一级收音机
2021/03/02 无线电
js数字输入框(包括最大值最小值限制和四舍五入)
2009/11/24 Javascript
javascript最基本的函数汇总
2015/06/25 Javascript
详解AngularJS控制器的使用
2016/03/09 Javascript
BootStrap的Datepicker控件使用心得分享
2016/05/25 Javascript
基于Angularjs实现分页功能
2016/05/30 Javascript
基于jQuery的checkbox全选问题分析
2016/11/18 Javascript
JavaScript原生编写《飞机大战坦克》游戏完整实例
2017/01/04 Javascript
jquery实现超简单的瀑布流布局【推荐】
2017/03/08 Javascript
js获取当前周、上一周、下一周日期
2017/03/19 Javascript
JavaScript Window窗口对象属性和使用方法
2020/01/19 Javascript
Vue 封装防刷新考试倒计时组件的实现
2020/06/05 Javascript
浅析JavaScript 函数防抖和节流
2020/07/13 Javascript
采用python实现简单QQ单用户机器人的方法
2014/07/03 Python
python抓取百度首页的方法
2015/05/19 Python
Linux 发邮件磁盘空间监控(python)
2016/04/23 Python
Python网络编程使用select实现socket全双工异步通信功能示例
2018/04/09 Python
从django的中间件直接返回请求的方法
2018/05/30 Python
python读取一个目录下所有txt里面的内容方法
2018/06/23 Python
简单了解Django应用app及分布式路由
2019/07/24 Python
Windows平台Python编程必会模块之pywin32介绍
2019/10/01 Python
python爬虫开发之selenium模块详细使用方法与实例全解
2020/03/09 Python
Pytorch十九种损失函数的使用详解
2020/04/29 Python
K近邻法(KNN)相关知识总结以及如何用python实现
2021/01/28 Python
Python 实现劳拉游戏的实例代码(四连环、重力四子棋)
2021/03/03 Python
StubHub意大利:购买和出售全球演唱会和体育赛事门票
2017/11/21 全球购物
机电一体化毕业生求职信
2013/11/02 职场文书
体育教育专业自荐信范文
2013/12/20 职场文书
办理居住证介绍信
2014/01/15 职场文书
十八届三中全会感言
2014/03/10 职场文书
歌唱比赛策划方案
2014/06/06 职场文书
学校爱国卫生月活动总结
2014/06/25 职场文书
室内趣味活动方案
2014/08/24 职场文书
三十年同学聚会致辞
2015/07/28 职场文书
Vue鼠标滚轮滚动切换路由效果的实现方法
2021/08/04 Vue.js
python开发的自动化运维工具ansible详解
2021/08/07 Python