日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

今天要介紹的這個Python第三方庫非常厲害,完美操作各種數據庫。名字叫 records, 在網上很少有這個庫的相關資料,但是在開源社區可是很火熱的哦。如果這還不能打消你的顧慮,再告訴你一件事:如果你用 python 編程,你一定聽過 requests, 這兩個庫是同一個作者寫的。

 

Python自動化 如何優雅的操作數據庫?

 

 

一、快速使用

使用步驟:

1、連接數據庫,返回 db 數據庫對象

2、db 對象執行 sql 語句

# pip install records 安裝
import records

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

獲取數據庫的格式是標準的 URL 格式,如果使用的不是 mysql 數據庫,只需要換掉數據庫類型就可以了:

 

Python自動化 如何優雅的操作數據庫?

 

 

二、創建表

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

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

三、插入單條數據

records 支持使用 :variable 定義變量,通過參數傳入完成動態傳值,在需要動態加載數據的時候非常有用:
user = {"name": "yuze5", "age": 20}
db.query('INSERT INTO lemon_user(name,age) values (:name, :age)', **user)

四、插入多條數據

sql 語句在執行多條數據操作的時候非常不方便,尤其是當值還是變化的時候。 records 提供的 bulk_query 方法能快捷的插入和更新多條數據:
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)

五、數據查詢

查詢到數據以后,可以通過 all() 方法獲取所有的記錄,支持 3 種類型。
  • 默認是自己封裝的 RecordCollection 對象,
  • 也可以通過 as_dict=True 參數轉成字典形式,
  • 可以通過 as_ordereddict=True 轉成排序字典形式
rows = db.query('SELECT * FROM lemon_user;')
# 得到所有數據
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())

六、簡潔的數據庫事務支持

數據庫事務是經常需要使用到的數據庫操作,他通常是為了保持數據原子性和一致性。

比如一個轉賬的數據庫操作:

1、從 yuze 賬號中讀取余額 , 2、對 yuze 賬號余額減去轉賬 - 400 3、從 chaoge 賬號中把余額讀出來 4、對 chaoge 賬號做加法操作(+400)。

我們必須保證這 4 步同時執行成功,要么同時都不成功。如果前 2 步已經執行成功,但是到第 3 步發生了錯誤導致后面都不能執行,就會出現問題:yuze 的賬號被扣了錢,但是 chaoge 的賬號卻沒有加錢。

通過數據庫事務就能避免這種情況。

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

七、數據導出為 json

數據庫數據得到以后還需要進一步的操作,比如保存起來。

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

八、數據導出到 Excel 文件

最常用的是如果需要各種各樣的報表,需要放到 excel 文件中保存起來。

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

導出的數據效果:

Python自動化 如何優雅的操作數據庫?

 

 

九、總結

  • records 支持多種不同的數據庫;
  • records 的方法非常簡單和統一,不像 pymysql 還需要記住如游標對象這樣的底層信息;
  • 自動實現上下文管理器,不需要關注鏈接狀態;
  • 支持 :variable 方言,以安全的形式進行動態參數傳遞,防止 sql 語句不規范導致的安全問題;
  • 支持數據庫事務,保持數據的原子性和一致性;
  • 輕松導出為 json, yaml, xls, xlsx, pandas, html 等多種數據格式。
  • 源碼非常簡單,你一定看得懂。

分享到:
標簽:Python
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定