python通用數(shù)據(jù)庫(kù)操作工具 pydbclib的使用簡(jiǎn)介
pydbclib是一個(gè)通用的python關(guān)系型數(shù)據(jù)庫(kù)操作工具包,使用統(tǒng)一的接口操作各種關(guān)系型數(shù)據(jù)庫(kù)(如 oracle、mysql、postgres、hive、impala等)進(jìn)行增刪改查,它是對(duì)各個(gè)python數(shù)據(jù)庫(kù)連接驅(qū)動(dòng)包(如sqlalchemy、pymysql、cx_Oracle、pyhive、pyodbc、impala等)的封裝,依照python最簡(jiǎn)原則SQL占位符統(tǒng)一成 ':[name]' 這一種形式,這點(diǎn)和sqlalchemy是一樣的
安裝
pip3 install pydbclib
簡(jiǎn)單使用
看下簡(jiǎn)單的查詢示例
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),向庫(kù)里寫(xiě)入記錄也是字典形式,如果要使用原生元祖形式,查詢函數(shù)read里添加as_dict=False參數(shù)
接口文檔
數(shù)據(jù)庫(kù)連接,更多常用數(shù)據(jù)庫(kù)連接方式參考文章結(jié)尾
# connect函數(shù)有個(gè)driver參數(shù)決定你是通過(guò)哪個(gè)數(shù)據(jù)庫(kù)驅(qū)動(dòng)包去連接的
# driver參數(shù)默認(rèn)值是sqlalchemy,即通過(guò)sqlalchemy驅(qū)動(dòng)包連接數(shù)據(jù)庫(kù)
>>> db = pydbclib.connect("sqlite:///:memory:")
>>> db = pydbclib.connect(":memory:", driver='sqlite3')
# 也可以傳入驅(qū)動(dòng)包連接對(duì)象
>>> 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ù)庫(kù)連接包基本一致,不同點(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對(duì)每條記錄進(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對(duì)象, 前提已經(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'}
# 也可以直接寫(xiě)成sql條件表達(dá)式,其他接口的條件參數(shù)類似都可以是表達(dá)式
>>> db.get_table("foo").find_one("a=1")
{'a': 1, 'b': 'one'}
# 查詢字段a=1所有記錄,find返回迭代器對(duì)象同上面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ù)庫(kù)連接
1. Common Driver
# 使用普通數(shù)據(jù)庫(kù)驅(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")
# 通過(guò)odbc方式連接
db = pydbclib.connect('DSN=mysqldb;UID=user;PWD=password', driver="pyodbc")
# 通過(guò)已有驅(qū)動(dòng)連接方式連接
import pymysql
con = pymysql.connect(user="user", password="password", database="test")
db = pydbclib.connect(driver=con)
2. Sqlalchemy Driver
# 使用Sqlalchemy包來(lái)連接數(shù)據(jù)庫(kù),drvier參數(shù)默認(rèn)為'sqlalchemy'
# 連接oracle
db = pydbclib.connect("oracle://user:password@local:1521/xe")
# 連接mysql
db = pydbclib.connect("mysql+pyodbc://:@mysqldb")
# 通過(guò)已有engine連接
from sqlalchemy import create_engine
engine = create_engine("mysql+pymysql://user:password@localhost:3306/test")
db = pydbclib.connect(driver=engine)
使用過(guò)程中有任何疑問(wèn),歡迎評(píng)論交流
項(xiàng)目地址pydbclib
以上就是python通用數(shù)據(jù)庫(kù)操作工具 pydbclib的使用簡(jiǎn)介的詳細(xì)內(nèi)容,更多關(guān)于python 數(shù)據(jù)庫(kù)操作工具pydbclib的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- 詳解使用Python寫(xiě)一個(gè)向數(shù)據(jù)庫(kù)填充數(shù)據(jù)的小工具(推薦)
- Python操作MySQL數(shù)據(jù)庫(kù)9個(gè)實(shí)用實(shí)例
- python Django連接MySQL數(shù)據(jù)庫(kù)做增刪改查
- python連接oracle數(shù)據(jù)庫(kù)實(shí)例
- Python如何讀取MySQL數(shù)據(jù)庫(kù)表數(shù)據(jù)
- Python使用cx_Oracle模塊操作Oracle數(shù)據(jù)庫(kù)詳解
- 跟老齊學(xué)Python之使用Python查詢更新數(shù)據(jù)庫(kù)
- Python操作MongoDB數(shù)據(jù)庫(kù)PyMongo庫(kù)使用方法
- Python MySQL數(shù)據(jù)庫(kù)連接池組件pymysqlpool詳解
- Python基于Pymssql模塊實(shí)現(xiàn)連接SQL Server數(shù)據(jù)庫(kù)的方法詳解
相關(guān)文章
簡(jiǎn)單易懂Pytorch實(shí)戰(zhàn)實(shí)例VGG深度網(wǎng)絡(luò)
這篇文章主要介紹了簡(jiǎn)單易懂Pytorch實(shí)戰(zhàn)實(shí)例VGG深度網(wǎng)絡(luò),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08
Pythonr基于selenium如何實(shí)現(xiàn)不同商城的商品價(jià)格差異分析系統(tǒng)
這篇文章主要給大家介紹了關(guān)于Pythonr基于selenium如何實(shí)現(xiàn)不同商城的商品價(jià)格差異分析系統(tǒng)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-03-03
pandas.DataFrame中提取特定類型dtype的列
本文主要介紹了pandas.DataFrame中提取特定類型dtype的列,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02
pip安裝Python庫(kù)時(shí)遇到的問(wèn)題及解決方法
這篇文章主要介紹了pip安裝Python庫(kù)時(shí)遇到的問(wèn)題及解決方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-11-11
關(guān)于pycharm?python3.7成功安裝dlib庫(kù)的問(wèn)題
這篇文章主要介紹了pycharm?python3.7成功安裝dlib庫(kù)的解決方法,本文分步驟給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-12-12
python中的 Matplotlib 繪制多子圖時(shí)的重疊問(wèn)題及解決方案
當(dāng)使用 Matplotlib 繪制多個(gè)子圖(subplots)時(shí),如果標(biāo)簽或標(biāo)題文字交叉或重疊,遇到這樣的問(wèn)題如何處理呢,下面小編給大家介紹了python中的 Matplotlib 繪制多子圖時(shí)的重疊問(wèn)題及解決方案,需要的朋友可以參考下2024-06-06
pytorch 在sequential中使用view來(lái)reshape的例子
今天小編就為大家分享一篇pytorch 在sequential中使用view來(lái)reshape的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-08-08

