python 通用数据库类_python 数据库通用工具包pydbclib

由于python的数据库操作有各种样的第三方库,相互之间使用都会有点差别(比如sql占位符就有’?’,’:’,’%s’等,该工具的通配符都是”:”标准),导致代码在切换数据库时也需要相应改动,应此自己封装了一个通用的库可以用python调用各种类型的数据库并且进一步简化了数据库操作步骤,并且可以自定义扩展

安装

pip install pydbclib

下面都以python内置的sqlite数据库为例

读操作(DQL)

from pydbclib import connection

with connection('test.db',driver='sqlite3') as db:

rs1=db.read('select id,name from test')

rs2=db.read_dict('select id,name from test')

# rs1返回格式:[(1,'test1'),(2,'test2')]

# rs2返回格式:[{'id':1,'name':'test1'},{'id':2,'name':'test2'}]

写操作(DML)

所有写操作都会返回数据库受影响行数

# 列表参数

db.write('insert into test(id,name) values(:1,:2)',[(1,'test1'),(2,'test2')])

# 字典参数

db.write('insert into test(id,name) values(:id,:name)',

[{'id':1,'name':'test1'},{'id':2,'name':'test2'}])

# 如果你的字典key值和数据库的表能对应上就可以这么写

db.write_by_dict('test',[{'id':1,'name':'test1'},{'id':2,'name':'test2'}])

db.merge('test',[{'id':2,'name':'tow'},{'id':3,'name':'test3'}],

unique=['id'])

DDL

db.ddl('create table test(id varchar(4),name varchar(10))')

db.ddl('drop table test')

自定义扩展函数

这里基于sqlalchemy方式来连接的oracle数据库

from pydbclib import Connection

class MyUDF(Connection):

def total_data(self, table):

return self.read('select count(*) from :1',table)

with MyUDF('oracle://lyt:lyt@local:1521/xe') as db:

count = db.total_data('test')

print('test表的总数量为:', count)

返回db对象的connect属性可以作为pandas.read_sql 中的con参数使用

常用数据库连接方式

实际参数视具体使用的驱动程序(配置的driver参数)

# pymysql连接mysql

connection(host='localhost',user='root',password='password',database='test',driver='pymysql')

# pyodbc连接odbc驱动

connection('DSN=mydb;UID=root;PWD=password',driver='pyodbc')

# cx_Oracle连接oracle

connection('lyt/lyt@local:1521/xe',driver='cx_Oracle')

# sqlalchemy连接oracle

connection('oracle://lyt:lyt@local:1521/xe')

connection工厂的driver参数默认是以sqlalchemy方式连接,个人也比较喜欢用sqlalchemy驱动的方式连接,应为数据库连接配置起来方便,看起来清晰简洁,是一个比较好的数据通用连接标准,另外基于此包之上和pandas结合开发了小数据量简易的python etl工具,支持UDF操作,目前还不是很完善,仅仅都是支持关系型数据库的,如果有人使用会考虑做的更通用,比如能支持文件,nosql之类的,等有时间在更新

具体请参考git上源码pydbclib

喜欢的记得点star,不然也不知道有没人用,不足的地方请指正

新人第一次写技术博客,描述有点乱还请见谅

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值