欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python 数据库通用工具包pydbclib

程序员文章站 2024-03-20 22:32:28
...

由于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:[email protected]: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/[email protected]:1521/xe',driver='cx_Oracle')
# sqlalchemy连接oracle  
connection('oracle://lyt:[email protected]:1521/xe')

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

具体请参考git上源码pydbclib

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

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