最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

pydbclib是一個通用的python關(guān)系型數(shù)據(jù)庫操作工具包,使用統(tǒng)一的接口操作各種關(guān)系型數(shù)據(jù)庫(如 oracle、mysql、postgres、hive、impala等)進行增刪改查,它是對各個python數(shù)據(jù)庫連接驅(qū)動包(如sqlalchemy、pymysql、cx_Oracle、pyhive、pyodbc、impala等)的封裝,依照python最簡原則SQL占位符統(tǒng)一成 ':[name]' 這一種形式,這點和sqlalchemy是一樣的

安裝

pip3 install pydbclib

簡單使用

看下簡單的查詢示例

from pydbclib import connect
# 使用with上下文,可以自動提交,自動關(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ù)有個driver參數(shù)決定你是通過哪個數(shù)據(jù)庫驅(qū)動包去連接的
# driver參數(shù)默認(rèn)值是sqlalchemy,即通過sqlalchemy驅(qū)動包連接數(shù)據(jù)庫
>>> db = pydbclib.connect("sqlite:///:memory:")
>>> db = pydbclib.connect(":memory:", driver='sqlite3')
# 也可以傳入驅(qū)動包連接對象
>>> 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ù)庫連接包基本一致,不同點是它既可以單條執(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對每條記錄進行數(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()

表級別操作的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條件表達式,其他接口的條件參數(shù)類似都可以是表達式
>>> 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ū)動連接,driver參數(shù)指定驅(qū)動包名稱
# 例如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ū)動連接方式連接
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)

使用過程中有任何疑問,歡迎評論交流
項目地址pydbclib

以上就是python通用數(shù)據(jù)庫操作工具 pydbclib的使用簡介的詳細(xì)內(nèi)容,更多關(guān)于python 數(shù)據(jù)庫操作工具pydbclib的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論

东兰县| 多伦县| 永城市| 和顺县| 汕尾市| 普定县| 民县| 双鸭山市| 普定县| 界首市| 元江| 长垣县| 漳浦县| 安平县| 涟源市| 五台县| 双峰县| 辽阳市| 井冈山市| 屏边| 洛南县| 新沂市| 临桂县| 申扎县| 澄城县| 墨竹工卡县| 崇阳县| 伊春市| 隆安县| 嘉兴市| 景宁| 余江县| 遂溪县| 柳州市| 辛集市| 西宁市| 农安县| 宜州市| 贵南县| 二连浩特市| 榆社县|