欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python通用數(shù)據(jù)庫(kù)操作工具 pydbclib的使用簡(jiǎn)介

 更新時(shí)間:2020年12月21日 16:39:52   作者:taogeYT  
這篇文章主要介紹了python通用數(shù)據(jù)庫(kù)操作工具 pydbclib的使用簡(jiǎn)介,幫助大家更好的理解和使用python,感興趣的朋友可以了解下

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)文章!

相關(guān)文章

  • Python爬取csnd文章并轉(zhuǎn)為PDF文件

    Python爬取csnd文章并轉(zhuǎn)為PDF文件

    這篇文章主要介紹了Python爬取csnd文章并轉(zhuǎn)為PDF文件,通過(guò)開(kāi)發(fā)者工具進(jìn)行抓包分析?分析數(shù)據(jù)從哪里來(lái)的,然后發(fā)送請(qǐng)求?對(duì)于文章列表頁(yè)面發(fā)送請(qǐng)求,獲取數(shù)據(jù)?獲取網(wǎng)頁(yè)源代碼,解析數(shù)據(jù)文章的url及文章標(biāo)題,發(fā)送請(qǐng)求?對(duì)于文章詳情頁(yè)url地址發(fā)送請(qǐng)求,需要的朋友可以參考一下
    2022-01-01
  • 簡(jiǎn)單易懂Pytorch實(shí)戰(zhàn)實(shí)例VGG深度網(wǎng)絡(luò)

    簡(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)

    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
  • Python特殊方法整理匯總

    Python特殊方法整理匯總

    這篇文章主要介紹了Python特殊方法整理匯總,有入門(mén)python的朋友可以跟隨小編一起來(lái)學(xué)習(xí)下
    2021-03-03
  • pandas.DataFrame中提取特定類(lèi)型dtype的列

    pandas.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-02
  • pip安裝Python庫(kù)時(shí)遇到的問(wèn)題及解決方法

    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)題

    關(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)題及解決方案

    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的例子

    今天小編就為大家分享一篇pytorch 在sequential中使用view來(lái)reshape的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-08-08
  • Python正則表達(dá)式的使用范例詳解

    Python正則表達(dá)式的使用范例詳解

    本文將是一系列關(guān)于Python正則表達(dá)式文章的其中一部分。在這個(gè)系列的第一篇文章中,我們將重點(diǎn)討論如何使用Python中的正則表達(dá)式并突出Python中一些獨(dú)有的特性。
    2014-08-08

最新評(píng)論