Python第三方庫 - records - 數(shù)據(jù)庫操作庫

今天要介紹的這個python第三方庫非常厲害榕栏,完美操作各種數(shù)據(jù)庫。名字叫records珊搀,在網(wǎng)上很少有這個庫的相關(guān)資料,但是在開源社區(qū)可是很火熱的哦尾菇。如果這還不能打消你的顧慮境析,再告訴你一件事:如果你用python編程,你一定聽過requests派诬,這兩個庫是同一個作者寫的簿晓。

一、快速使用

使用步驟:
1千埃、連接數(shù)據(jù)庫憔儿,返回 db 數(shù)據(jù)庫對象
2、db 對象執(zhí)行 sql 語句

# pip install records 安裝
import records

# 獲取數(shù)據(jù)庫
db = records.Database('mysql+pymysql://root:@localhost:3306/dev01_git')
# 查詢
rows = db.query('select * from lemon_user')

獲取數(shù)據(jù)庫的格式是標(biāo)準(zhǔn)的 URL 格式放可,如果使用的不是 mysql 數(shù)據(jù)庫谒臼,只需要換掉數(shù)據(jù)庫類型就可以了:

二、創(chuàng)建表

# 連接數(shù)據(jù)庫
db = records.Database('mysql+pymysql://root:@localhost:3306/dev01_git')

# 創(chuàng)建表
sql_create_table = """CREATE TABLE IF NOT EXISTS lemon_user (
    name varchar(20),
    age int
) DEFAULT CHARSET=utf8 ;"""

db.query(sql_create_table)


三耀里、插入單條數(shù)據(jù)

records 支持使用:variable 定義變量蜈缤,通過參數(shù)傳入完成動態(tài)傳值,在需要動態(tài)加載數(shù)據(jù)的時候非常有用:

user = {"name": "yuze5", "age": 20}
db.query('INSERT INTO lemon_user(name,age) values (:name, :age)', **user)

四冯挎、插入多條數(shù)據(jù)

sql 語句在執(zhí)行多條數(shù)據(jù)操作的時候非常不方便底哥,尤其是當(dāng)值還是變化的時候。 records 提供的 bulk_query 方法能快捷的插入和更新多條數(shù)據(jù):

users = [
    {"name":"yuze", "age": 13},
    {"name":"yuze2", "age": 15},
    {"name":"yuze3", "age": 16}
]
db.bulk_query('INSERT INTO lemon_user(name,age) values (:name, :age)', users)

四房官、數(shù)據(jù)查詢

查詢到數(shù)據(jù)以后趾徽,可以通過 all() 方法獲取所有的記錄,支持 3 種類型翰守。默認(rèn)是自己封裝的 RecordCollection 對象孵奶,也可以通過 as_dict=True 參數(shù)轉(zhuǎn)成字典形式,可以通過 as_ordereddict=True 轉(zhuǎn)成排序字典形式

rows = db.query('SELECT * FROM lemon_user;')
# 得到所有數(shù)據(jù)
print(rows.all())
# 字典形式展示
print(rows.all(as_dict=True))
# 獲取第一個
print(rows.first())
# 以字典形式獲取第一個
print(rows.first(as_dict=True))
# 排序字典
print(rows.first(as_ordereddict=True))
# 查詢唯一的一個
print(rows.one())

五蜡峰、簡潔的數(shù)據(jù)庫事務(wù)支持

數(shù)據(jù)庫事務(wù)是經(jīng)常需要使用到的數(shù)據(jù)庫操作了袁,他通常是為了保持?jǐn)?shù)據(jù)原子性和一致性朗恳。比如一個轉(zhuǎn)賬的數(shù)據(jù)庫操作:1、從 yuze 賬號中讀取余額 载绿, 2粥诫、對 yuze 賬號余額減去轉(zhuǎn)賬 - 400 3、從 chaoge 賬號中把余額讀出來 4崭庸、對 chaoge 賬號做加法操作(+400)怀浆。我們必須保證這 4 步同時執(zhí)行成功,要么同時都不成功冀自。如果前 2 步已經(jīng)執(zhí)行成功,但是到第 3 步發(fā)生了錯誤導(dǎo)致后面都不能執(zhí)行秒啦,就會出現(xiàn)問題:yuze 的賬號被扣了錢熬粗,但是 chaoge 的賬號卻沒有加錢。通過數(shù)據(jù)庫事務(wù)就能避免這種情況余境。

with db.transaction() as tx:
    user = {"name": "yuze9", "age": 20}
    tx.query('INSERT INTO lemon_user(name,age) values (:name, :age)', **user)
    # 下面是錯誤的 sql 語句驻呐,有錯誤,則上面的 sql 語句不會成功執(zhí)行芳来。
    tx.query('sof')

六含末、導(dǎo)出Json

數(shù)據(jù)庫數(shù)據(jù)得到以后還需要進一步的操作,比如保存起來即舌。

rows = db.query('SELECT * FROM lemon_user;')
json_rows = rows.export('yaml')
print(json_rows)

七佣盒、數(shù)據(jù)導(dǎo)出Excel

rows = db.query('SELECT * FROM lemon_user;')
with open('users.xlsx', 'wb') as f:
    f.write(rows.export('xlsx'))

導(dǎo)出的數(shù)據(jù)效果:

八、總結(jié)

records 支持多種不同的數(shù)據(jù)庫顽聂;records 的方法非常簡單和統(tǒng)一肥惭,不像 pymysql 還需要記住如游標(biāo)對象這樣的底層信息;自動實現(xiàn)上下文管理器紊搪,不需要關(guān)注鏈接狀態(tài)蜜葱;支持 :variable 方言,以安全的形式進行動態(tài)參數(shù)傳遞耀石,防止 sql 語句不規(guī)范導(dǎo)致的安全問題牵囤;支持?jǐn)?shù)據(jù)庫事務(wù),保持?jǐn)?shù)據(jù)的原子性和一致性滞伟;輕松導(dǎo)出為 json, yaml, xls, xlsx, pandas, html 等多種數(shù)據(jù)格式揭鳞。源碼非常簡單,你一定看得懂梆奈。


原文作者:檸檬班
鏈接:https://www.zhihu.com/question/24590883/answer/799802849

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末汹桦,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子鉴裹,更是在濱河造成了極大的恐慌舞骆,老刑警劉巖钥弯,帶你破解...
    沈念sama閱讀 223,207評論 6 521
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異督禽,居然都是意外死亡脆霎,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,455評論 3 400
  • 文/潘曉璐 我一進店門狈惫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來睛蛛,“玉大人,你說我怎么就攤上這事胧谈∫渖觯” “怎么了?”我有些...
    開封第一講書人閱讀 170,031評論 0 366
  • 文/不壞的土叔 我叫張陵菱肖,是天一觀的道長客冈。 經(jīng)常有香客問我,道長稳强,這世上最難降的妖魔是什么场仲? 我笑而不...
    開封第一講書人閱讀 60,334評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮退疫,結(jié)果婚禮上渠缕,老公的妹妹穿的比我還像新娘。我一直安慰自己褒繁,他們只是感情好亦鳞,可當(dāng)我...
    茶點故事閱讀 69,322評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著棒坏,像睡著了一般蚜迅。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上俊抵,一...
    開封第一講書人閱讀 52,895評論 1 314
  • 那天谁不,我揣著相機與錄音,去河邊找鬼徽诲。 笑死刹帕,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的谎替。 我是一名探鬼主播偷溺,決...
    沈念sama閱讀 41,300評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼钱贯!你這毒婦竟也來了挫掏?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,264評論 0 277
  • 序言:老撾萬榮一對情侶失蹤秩命,失蹤者是張志新(化名)和其女友劉穎尉共,沒想到半個月后褒傅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,784評論 1 321
  • 正文 獨居荒郊野嶺守林人離奇死亡袄友,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,870評論 3 343
  • 正文 我和宋清朗相戀三年殿托,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片剧蚣。...
    茶點故事閱讀 40,989評論 1 354
  • 序言:一個原本活蹦亂跳的男人離奇死亡支竹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出鸠按,到底是詐尸還是另有隱情礼搁,我是刑警寧澤,帶...
    沈念sama閱讀 36,649評論 5 351
  • 正文 年R本政府宣布目尖,位于F島的核電站馒吴,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏卑雁。R本人自食惡果不足惜募书,卻給世界環(huán)境...
    茶點故事閱讀 42,331評論 3 336
  • 文/蒙蒙 一绪囱、第九天 我趴在偏房一處隱蔽的房頂上張望测蹲。 院中可真熱鬧,春花似錦鬼吵、人聲如沸扣甲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,814評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽琉挖。三九已至,卻和暖如春涣脚,著一層夾襖步出監(jiān)牢的瞬間示辈,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,940評論 1 275
  • 我被黑心中介騙來泰國打工遣蚀, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留矾麻,地道東北人。 一個月前我還...
    沈念sama閱讀 49,452評論 3 379
  • 正文 我出身青樓芭梯,卻偏偏與公主長得像险耀,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子玖喘,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,995評論 2 361