python records 庫使用方法

2021-09-28 15:39:50 字數 4504 閱讀 4660

records 庫由大名鼎鼎的 kenneth reitz 開發,他也是 python requests 庫的作者。records 模組的口號是 sql for the human。開發人員基本只需要關注 sql 語句。

records 庫基於 sqlalchemy 實現,所以連線字串相同。比如我想基於 pymysql 連線到 mysql 資料庫,則用下面的語句建立連線:

import records

db = records.database(

"mysql+pymysql://root:pwd@localhost/stonetest?charset=utf8"

)

連線到資料庫以後,假如我需要查詢 emp_master 表的資料:

rows = db.query(

"select * from emp_master limit 0, 10"

)print

(rows.dataset)

rows.dataset輸出類似於命令視窗的資料顯示:

records 使用 dict 提供引數,sql 語句支援:variable_name語法,增加了 sql 語句的可讀性,也避免了 sql 注入等問題。

emp =

rows = db.query(

"select * from emp_master where gender=:gender and marital_stat=:maritalstat"

,**emp)

print

(rows.dataset)

輸出結果如下:

剛才介紹了recordcollection.dataset輸出格式化的資料。除此之外,records 還提供了很多輸出的方式。

recordcollection.all()方法將所有行輸出為乙個列表,每一行為 record 型別的例項,示例如下。

rows = db.query(

"select * from emp_master limit 0, 3"

)print

(rows.

all(

))

輸出:

[,

, ]

也可以使用遍歷的方法來輸出:

rows = db.query(

"select * from emp_master limit 0, 3"

)for row in rows:

print

(row.emp_id, row.gender, row.email, sep=

'\t'

)

輸出結果為:

1001    male    [email protected]

1002 female [email protected]

1003 female [email protected]

all()方法中,可傳入as_dict引數直接輸出 dict 格式:

rows = db.query(

"select * from emp_master limit 0, 3"

)print

(rows.

all(as_dict=

true

))

輸出結果為:

因為 dict 的 key 是無順序的,如果在意欄位的順序,傳入引數as_ordereddict:

rows = db.query(

"select * from emp_master limit 0, 3"

)print

(rows.

all(as_ordereddict=

true

))

輸出結果為:

records 認為,sql 語句本身決定了是查詢 (select)、還是資料操作 (update, insert, delete)、還是 ddl (creat table 等),所以執行 sql 語句只需要query方法就可以了。比如,要建立usertest表,仍然使用query方法:

sql =

"""create table usertest (

userid int primary key,

username varchar(50)

);"""

db.query(sql)

新增單條記錄也是使用query方法:

user =

db.query(

"insert into usertest (userid, username) values (:userid, :username)"

,**user)

新增批量記錄,可以使用bulk_query方法,一次執行多條語句:

users =[,

,]db.bulk_query(

"insert into usertest (userid, username) values (:userid, :username)"

, users)

records 支援事務。示例如下:

conn = db.get_connection(

)tx = conn.transaction(

)try

: conn.query(

"insert into usertest(userid, username) values(5, 'peggi')"

) conn.query(

"insert into usertest(userid, username) values(4, 'alice')"

) tx.commit(

)except exception as ex:

print

("*"*10

,"error occured"

,"*"*10

)print

(str

(ex)

) tx.rollback(

)finally

:

conn.close(

)

因為 userid 為 4 的記錄在資料表中已經存在,所以出現錯誤,兩條記錄都不會被建立。

********** error occured **********

(pymysql.err.integrityerror) (1062, "duplicate entry '4' for key 'primary'")

[sql: insert into usertest(userid, username) values(4, 'alice')]

(background on this error at:

records 庫的輸出和匯出都是利用tablib庫的功能,能方便地匯出到 json, csv ,excel 和 html 等不同格式,也是方便得不像話。

rows = db.query(

"select * from emp_master"

)with

open

('d:/test.json'

,'w'

)as f:

f.write(rows.export(

'json'

))

rows = db.query(

"select * from emp_master"

)with

open

('d:/test.xlsx'

,'wb'

)as f:

f.write(rows.export(

'xlsx'

))

PostgreSQL ArcSDE空間庫使用

結論 sde空間資料庫可以在arcgis desktop中進行編輯 查詢 顯示 匯出 匯入等。外圍工具 arccatalog arcgis desktop 將arcgis desktop安裝目錄 d program files x86 arcgis desktop10.5 databasesuppo...

使php支援mbstring庫

mbstring庫 全稱是multi byte string 即各種語言都有自己的編碼,他們的位元組數是不一樣的,目前php內部的編碼只支援iso 8859 euc jp,utf 8 其他的編碼的語言是沒辦法在php程式上正確顯示的。解決的方法就是通過php的mbstring函式庫來解決 其安裝是在...

Aqua Data Studio 資料庫工具使用

aqua data studio aqua data studio是一款完整ide的資料庫開發工具,它提供3種主要功能 資料查詢與管理工具。比對資料工具與源控制和檔案系統的整合工具。幫助你建立,編輯 和執行 sql 的管理工具指令碼編寫,以及瀏覽和修改資料庫組織。對所有主要關係的資料庫提供乙個一致的...