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返回迭代器類(lèi)型,用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ù)類(lèi)似都可以是表達(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)包名稱(chē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-08Pythonr基于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-03pandas.DataFrame中提取特定類(lèi)型dtype的列
本文主要介紹了pandas.DataFrame中提取特定類(lèi)型dtype的列,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02pip安裝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-12python中的 Matplotlib 繪制多子圖時(shí)的重疊問(wèn)題及解決方案
當(dāng)使用 Matplotlib 繪制多個(gè)子圖(subplots)時(shí),如果標(biāo)簽或標(biāo)題文字交叉或重疊,遇到這樣的問(wèn)題如何處理呢,下面小編給大家介紹了python中的 Matplotlib 繪制多子圖時(shí)的重疊問(wèn)題及解決方案,需要的朋友可以參考下2024-06-06pytorch 在sequential中使用view來(lái)reshape的例子
今天小編就為大家分享一篇pytorch 在sequential中使用view來(lái)reshape的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-08-08