python模塊篇04-records


 1 github鏈接為:https://github.com/kennethreitz/records
 2 1)SQLite 數據庫連接串:
 3   sqlite:///:memory: (or, sqlite://)
 4   sqlite:///relative/path/to/file.db
 5   sqlite:////absolute/path/to/file.db
 6   例:db = records.Database(‘sqlite:///users.db’)
 7 2)Oracle 數據庫連接示例:
 8   先安裝 cx_Oracle
 9   oracle://root:1234@ORCL
10 3)MySQL 數據庫連接串示例:
11   mysql://root:12345@localhost/mydb?charset=utf8
12 4)PostgreSQL 數據庫連接串示例:
13   postgresql://postgres:1234@localhost/mydb
14 5)SQL Server 數據庫連接示例:
15   首先安裝 pymssql
16   mssql+pymssql://sa:12345@localhost:1433/mydb
17 注意:
18   有些數據庫連接方式因第三方模塊不同,連接方式可能有多種,上述只是展示其中某一種連接方式,更詳細的連接方式請參考 SQLAlchemy。
 1 使用步驟:
 2   連接數據庫,返回 db 數據庫對象
 3   db 對象執行 sql 語句
 4 # pip install records 安裝
 5 import records
 6 # 獲取數據庫
 7 db = records.Database('mysql+pymysql://root:@localhost:3306/dev01_git')
 8 # 查詢
 9 rows = db.query('select * from lemon_user')  # 獲取數據庫的格式是標准的 URL 格式,如果使用的不是 mysql 數據庫,只需要換掉數據庫類型就可以了

 

 1 二、創建表
 2   # 連接數據庫
 3   db = records.Database('mysql+pymysql://root:@localhost:3306/dev01_git')
 4 
 5   # 創建表
 6   sql_create_table = """CREATE TABLE IF NOT EXISTS lemon_user (
 7       name varchar(20),
 8       age int
 9   ) DEFAULT CHARSET=utf8 ;"""
10 
11   db.query(sql_create_table)
12 
13 
14 三、插入單條數據
15   records 支持使用:variable 定義變量,通過參數傳入完成動態傳值,在需要動態加載數據的時候非常有用:
16 
17   user = {"name": "yuze5", "age": 20}
18   db.query('INSERT INTO lemon_user(name,age) values (:name, :age)', **user)
19 
20 四、插入多條數據
21   sql 語句在執行多條數據操作的時候非常不方便,尤其是當值還是變化的時候。 records 提供的 bulk_query 方法能快捷的插入和更新多條數據:
22 
23   users = [
24       {"name":"yuze", "age": 13},
25       {"name":"yuze2", "age": 15},
26       {"name":"yuze3", "age": 16}
27   ]
28   db.bulk_query('INSERT INTO lemon_user(name,age) values (:name, :age)', users)
29 
30 五、數據查詢
31   查詢到數據以后,可以通過 all() 方法獲取所有的記錄,支持 3 種類型。默認是自己封裝的 RecordCollection 對象,也可以通過 as_dict=True 參數轉成字典形式,可以通過 as_ordereddict=True 轉成排序字典形式
32 
33   rows = db.query('SELECT * FROM lemon_user;')
34   # 得到所有數據
35   print(rows.all())
36   # 字典形式展示
37   print(rows.all(as_dict=True))
38   # 獲取第一個
39   print(rows.first())
40   # 以字典形式獲取第一個
41   print(rows.first(as_dict=True))
42   # 排序字典
43   print(rows.first(as_ordereddict=True))
44   # 查詢唯一的一個
45   print(rows.one())
46   # 轉為表格形式
47   print(rows.dataset)
48   # 轉為json
49   print(rows.as_dict())
50   # 遍歷
51   for r in rows:
52       # 多種獲取方式
53       print(r.id, r['uname'], r[2])
54 
56 
57 安全參數化:
58   # Records 支持安全參數化,使用 :variable 定義變量,使用字典傳入參數值
59   params = {'id':1}
60   rows = db.query('select * from a_user where id = :id',**params)
61 
62 
64 
65 六、簡潔的數據庫事務支持
66   數據庫事務是經常需要使用到的數據庫操作,他通常是為了保持數據原子性和一致性。
67 比如一個轉賬的數據庫操作:
68 1、從 yuze 賬號中讀取余額 ,
69 2、對 yuze 賬號余額減去轉賬 - 400 
70 3、從 chaoge 賬號中把余額讀出來 
71 4、對 chaoge 賬號做加法操作(+400)。我們必須保證這 4 步同時執行成功,要么同時都不成功。如果前 2 步已經執行成功,但是到第 3 步發生了錯誤導致后面都不能執行,就會出現問題:yuze 的賬號被扣了錢,但是 chaoge 的賬號卻沒有加錢。通過數據庫事務就能避免這種情況。
72 
73 with db.transaction() as tx:
74     user = {"name": "yuze9", "age": 20}
75     tx.query('INSERT INTO lemon_user(name,age) values (:name, :age)', **user)
76     # 下面是錯誤的 sql 語句,有錯誤,則上面的 sql 語句不會成功執行。
77     tx.query('sof')
 1 事務支持:
 2   t = Database.transaction();
 3   t.commit()
 4 
 5 
 6 demo:
 7   db = records.Database()
 8   tx = db.transaction()
 9   try:
10     db.query(...)
11     db.query(...)
12     tx.commit()
13   except:
14     tx.rollback()

 

 1 數據導出功能:
 2 Records 還具有完整的 Tablib 集成功能,允許將結果導出到 CSV、XLS、JSON、HTML Tables, YAML、Pandas DataFrames。非常適合與朋友共享數據或生成報告。
 3 
 4 1. 以 dataset 方式導出
 5   dataset = rows.dataset
 6   print(dataset)
 7 
 8 結果:
 9   id|cid|uname 
10   --|---|------
11   1 |100|tom1  
12   2 |100|cat1  
13 
14 2. 以 csv 方式導出:結果以逗號分隔
15   csv = rows.export('csv')
16   print(csv)
17 
18 結果:
19   id,cid,uname
20   1,100,tom1
21   2,100,cat1
22 
23 3. 以 yaml 方式導出
24   yaml = rows.export('yaml')
25   print(yaml)
26 
27   結果:
28   - cid: 100
29     id: 1
30     uname: tom1
31   - cid: 100
32     id: 2
33     uname: cat1
34 
35 4. 以 JSON 方式導出:js對象表示法
36   jn = rows.export('json')
37   print(jn)
38 
39   結果:
40   [{"id": 1, "cid": 100, "uname": "tom1"}, {"id": 2, "cid": 100, "uname": "cat1"}]
41 
42   demo:
43     rows = db.query('SELECT * FROM lemon_user;')
44     json_rows = rows.export('yaml')
45     print(json_rows)
46 
47   # 把數據寫入yaml 文件里面
48   with open("222.yaml", "w", encoding="utf-8") as f:
49       f.write(json_rows)
50 
51 
52 
53 5. 以 xls/xlsx 方式導出
    demo1
54     xls = rows.export('xls') 55     print(xls) # b'\xd0\xcf\x11\xe0\xa1\xb1.......' 56
    demo2 57   with open('E://report.xls', 'wb') as f: 58   f.write(rows.export('xls'))
59   demo3 60   rows = db.query('SELECT * FROM lemon_user;') 61   with open('users.xlsx', 'wb') as f: 62   f.write(rows.export('xlsx')) 63 64 65 6. 以Pandas DataFrame 方式導出 66   首先安裝好 pandas 模塊。 67   rows = db.query('select * from a_user') 68   df = rows.export('df') 69   print(df) 70 71 結果: 72 id cid uname 73 0 1 100 tom1 74 1 2 100 cat1 75 2 3 100 kitty1


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM