1. 程式人生 > 程式設計 >python通用資料庫操作工具 pydbclib的使用簡介

python通用資料庫操作工具 pydbclib的使用簡介

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,record)
1
# 插入多條記錄
>>> db.execute("insert into foo(a,[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'}
# 轉換成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",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的資料請關注我們其它相關文章!