python etl_common_python通用数据库操作和ETL工具使用讲解

阴英武
2023-12-01

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

Installation:

pip install py_db

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

查询操作

from py_db import connection

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

res1 = db.query("select id, name from test")

res2 = db.dict_query("select id, name from test")

res1返回格式:[(1,"test1"),(2, "test2")]

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

插入更新操作

列表参数:

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

字典参数:

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

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

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

直接传入表名称和对应的字典或字典集合,建议结合pandas做数据采集、处理、入库非常方便

这里只介绍几种最常用的用法,还封装了很多其他功能

可以做自定义操作扩展:

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

from py_db import Connection

class MyUDF(Connection):

def total_data(self, table):

return self.query("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参数使用

介绍下几个常用连接方式:

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

pyodbc

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

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

sqlalchemy

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

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

 类似资料: