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 的管理工具指令碼編寫,以及瀏覽和修改資料庫組織。對所有主要關係的資料庫提供乙個一致的...