python通用數(shù)據(jù)庫操作工具 pydbclib的使用簡介
pydbclib是一個(gè)通用的python關(guān)系型數(shù)據(jù)庫操作工具包,使用統(tǒng)一的接口操作各種關(guān)系型數(shù)據(jù)庫(如 oracle、mysql、postgres、hive、impala等)進(jìn)行增刪改查,它是對各個(gè)python數(shù)據(jù)庫連接驅(qū)動(dòng)包(如sqlalchemy、pymysql、cx_Oracle、pyhive、pyodbc、impala等)的封裝,依照python最簡原則SQL占位符統(tǒng)一成 ':[name]' 這一種形式,這點(diǎn)和sqlalchemy是一樣的
安裝
pip3 install pydbclib
簡單使用
看下簡單的查詢示例
from pydbclib import connect
# 使用with上下文,可以自動(dòng)提交,自動(dòng)關(guān)閉連接
with connect("sqlite:///:memory:") as db:
db.execute('create table foo(a integer, b varchar(20))')
# 統(tǒng)一使用':[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())
查詢結(jié)果記錄是以字典形式展現(xiàn),向庫里寫入記錄也是字典形式,如果要使用原生元祖形式,查詢函數(shù)read里添加as_dict=False參數(shù)
接口文檔
數(shù)據(jù)庫連接,更多常用數(shù)據(jù)庫連接方式參考文章結(jié)尾
# connect函數(shù)有個(gè)driver參數(shù)決定你是通過哪個(gè)數(shù)據(jù)庫驅(qū)動(dòng)包去連接的
# driver參數(shù)默認(rèn)值是sqlalchemy,即通過sqlalchemy驅(qū)動(dòng)包連接數(shù)據(jù)庫
>>> db = pydbclib.connect("sqlite:///:memory:")
>>> db = pydbclib.connect(":memory:", driver='sqlite3')
# 也可以傳入驅(qū)動(dòng)包連接對象
>>> 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方法執(zhí)行SQL,和各數(shù)據(jù)庫連接包基本一致,不同點(diǎn)是它既可以單條執(zhí)行,也可以批量執(zhí)行(相當(dāng)于executemany),另外該方法的SQL占位符是':[name]'形式
>>> record = {"a": 1, "b": "one"}
>>> db.execute('create table foo(a integer, b varchar(20))')
# 插入單條記錄,結(jié)果返回影響行數(shù)
>>> 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. 查詢數(shù)據(jù)
# 查詢結(jié)果只返回一條記錄
>>> db.read_one("select * from foo")
{'a': 1, 'b': 'one'}
#read返回迭代器類型,用get方法獲取前幾條記錄,使用map對每條記錄進(jìn)行數(shù)據(jù)清洗
>>> 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'}
# 轉(zhuǎn)換成pandas dataframe對象, 前提已經(jīng)安裝了pandas
>>> db.read("select * from foo").to_df()
a b
0 1 one
1 1 one
2 1 one
3. 提交、回滾、關(guān)閉連接
>>> db.rollback() >>> db.commit() >>> db.close()
表級(jí)別操作的SQL接口封裝
1. 插入記錄
# 插入單條和插入多條,輸入?yún)?shù)字典的鍵值必須和表中字段同名
>>> 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條件表達(dá)式,其他接口的條件參數(shù)類似都可以是表達(dá)式
>>> 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()
[]
常用數(shù)據(jù)庫連接
1. Common Driver
# 使用普通數(shù)據(jù)庫驅(qū)動(dòng)連接,driver參數(shù)指定驅(qū)動(dòng)包名稱
# 例如pymysql包driver='pymysql',connect函數(shù)其余的參數(shù)和driver參數(shù)指定的包的創(chuàng)建連接參數(shù)一致
# 連接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")
# 通過已有驅(qū)動(dòng)連接方式連接
import pymysql
con = pymysql.connect(user="user", password="password", database="test")
db = pydbclib.connect(driver=con)
2. Sqlalchemy Driver
# 使用Sqlalchemy包來連接數(shù)據(jù)庫,drvier參數(shù)默認(rèn)為'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)
使用過程中有任何疑問,歡迎評論交流
項(xiàng)目地址pydbclib
以上就是python通用數(shù)據(jù)庫操作工具 pydbclib的使用簡介的詳細(xì)內(nèi)容,更多關(guān)于python 數(shù)據(jù)庫操作工具pydbclib的資料請關(guān)注腳本之家其它相關(guān)文章!
- 詳解使用Python寫一個(gè)向數(shù)據(jù)庫填充數(shù)據(jù)的小工具(推薦)
- Python操作MySQL數(shù)據(jù)庫9個(gè)實(shí)用實(shí)例
- python Django連接MySQL數(shù)據(jù)庫做增刪改查
- python連接oracle數(shù)據(jù)庫實(shí)例
- Python如何讀取MySQL數(shù)據(jù)庫表數(shù)據(jù)
- Python使用cx_Oracle模塊操作Oracle數(shù)據(jù)庫詳解
- 跟老齊學(xué)Python之使用Python查詢更新數(shù)據(jù)庫
- Python操作MongoDB數(shù)據(jù)庫PyMongo庫使用方法
- Python MySQL數(shù)據(jù)庫連接池組件pymysqlpool詳解
- Python基于Pymssql模塊實(shí)現(xiàn)連接SQL Server數(shù)據(jù)庫的方法詳解
相關(guān)文章
Python 實(shí)現(xiàn)文件的全備份和差異備份詳解
這篇文章主要介紹了Python 實(shí)現(xiàn)文件的全備份和差異備份詳解的相關(guān)資料,需要的朋友可以參考下2016-12-12
基于jupyter代碼無法在pycharm中運(yùn)行的解決方法
這篇文章主要介紹了基于jupyter代碼無法在pycharm中運(yùn)行的解決方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04
用Anaconda安裝本地python包的方法及路徑問題(圖文)
這篇文章主要介紹了用Anaconda安裝本地python包的方法及路徑問題,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-07-07
Python實(shí)現(xiàn)Linux中的du命令
這篇文章主要介紹了Python實(shí)現(xiàn)Linux中簡單du命令,需要的朋友可以參考下2017-06-06
flask+pymysql實(shí)現(xiàn)Web端操作數(shù)據(jù)庫的項(xiàng)目實(shí)踐
本文主要介紹了flask+pymysql實(shí)現(xiàn)Web端操作數(shù)據(jù)庫的項(xiàng)目實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06
基于Python實(shí)現(xiàn)的車牌識(shí)別系統(tǒng)
本文將以基于Python的車牌識(shí)別系統(tǒng)實(shí)現(xiàn)為方向,介紹車牌識(shí)別技術(shù)的基本原理、常用算法和方法,并詳細(xì)講解如何利用Python語言實(shí)現(xiàn)一個(gè)完整的車牌識(shí)別系統(tǒng),需要的朋友可以參考下2023-10-10
利用Python批量提取Win10鎖屏壁紙實(shí)戰(zhàn)教程
這篇文章主要給大家介紹了關(guān)于利用Python批量提取Win10鎖屏壁紙的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2018-03-03

