python records操作數據庫


records

簡單了解:

records:SQL for Humans™ https://pypi.python.org/pypi/records/

Records 是一個非常簡單但功能強大的庫,用於對大多數關系數據庫進行原始SQL查詢。

只需編寫SQL。沒有鍾聲,沒有哨聲。使用可用的標准工具,這一常見任務可能會令人驚訝地困難。該庫努力使此工作流程盡可能簡單,同時提供一個優雅的界面來處理您的查詢結果。

數據庫支持包括RedShift,Postgres,MySQL,SQLite,Oracle和MS-SQL(不包括驅動程序)。

安裝:pip install records

使用:

  • 調用 records.Database(......) 連接數據庫,返回 <Database open=True>數據庫對象
  • <Database open=True> 對象執行 sql 語句,詳細見下。

1、連接數據庫:

import records

# 連接數據庫
db = records.Database('mysql://root:xuyang@localhost:3306/ceshi?charset=utf8mb4', pool_recycle=3600)  # MySQL默認連接8小時后自動斷連,加參數pool_recycle每一小時重連 A Database. Encapsulates a url and an SQLAlchemy engine with a pool of connections.
print(db)  # <Database open=True> 對象

# --------------------------
print(db.get_table_names())  # Returns a list of table names for the connected database.

print(db.get_connection)  # Get a connection to this Database. Connections are retrieved from a pool.

2、刪除表

table_name = 'userinfo'  # 數據表的表名
drop_table_sql = """drop table if exists {};""".format(table_name)
db.query(drop_table_sql)

3、創建表

create_table_sql = """create table if not exists {} (
    name varchar(20),
    age int
) default charset=utf8;""".format(table_name)
db.query(create_table_sql)

4、插入數據

  • 插入單條
# records 支持使用 :variable 定義變量,通過參數傳入完成動態傳值,在需要動態加載數據的時候非常有用:
user = {"name": "user0", "age": 20}
db.query('insert into userinfo(name, age) values(:name, :age)', **user)
  • 插入多條
# records 提供的 bulk_query 方法能快捷的插入和更新多條數據:
users = [
	{"name":"user1", "age": 21},
	{"name":"user2", "age": 22},
	{"name":"user3", "age": 23}
]
db.bulk_query('insert into userinfo(name, age) values(:name, :age)', users)

5、查詢數據

rows = db.query('select * from userinfo;')  
# print(rows)  # <RecordCollection size=0 pending=True>

# print(rows.all())  # 默認是自己封裝的 RecordCollection 對象:[<Record {"name": "user0", "age": 20}>, <Record {"name": "user1", "age": 21}>, <Record {"name": "user2", "age": 22}>, <Record {"name": "user3", "age": 23}>]

# print(rows.all(as_dict=True))  # 可以通過 as_dict=True 參數轉成  字典形式:[{'name': 'user0', 'age': 20}, {'name': 'user1', 'age': 21}, {'name': 'user2', 'age': 22}, {'name': 'user3', 'age': 23}]

# print(rows.all(as_ordereddict=True))  # 通過 as_ordereddict=True 轉成  排序字典形式:[OrderedDict([('name', 'user0'), ('age', 20)]), OrderedDict([('name', 'user1'), ('age', 21)]), OrderedDict([('name', 'user2'), ('age', 22)]), OrderedDict([('name', 'user3'), ('age', 23)])]

# print(rows.first())  # <Record {"name": "user0", "age": 20}>
# print(rows.first(as_dict=True))  # {'name': 'user0', 'age': 20}

# print(rows.first(as_ordereddict=True))  # OrderedDict([('name', 'user0'), ('age', 20)])

# # print(rows.one())  # 查詢唯一的一個。我自己這里報錯

userinfo_dict = rows.as_dict()  # 轉換成 字典
print(userinfo_dict[0]['age'])  # 20

# 可 遍歷 rows
for row in rows:
	print(row.name)

6、數據導出為 json

print(rows.export('json'))

json_rows = rows.export('yaml')
print(json_rows)
# ------------------------------
with open('userinfo.json', 'w') as fp:
	fp.write(rows.export('json'))

輸出如下:

[{"name": "user0", "age": 20}, {"name": "user1", "age": 21}, {"name": "user2", "age": 22}, {"name": "user3", "age": 23}]

- {age: 20, name: user0}
- {age: 21, name: user1}
- {age: 22, name: user2}
- {age: 23, name: user3}

7、數據導出到 Excel 文件

with open('userinfo.xlsx', 'wb') as f:
	f.write(rows.export('xlsx'))

8、轉為表格形式

print(rows.dataset)

輸出如下:

name |age
-----|---
user0|20 
user1|21 
user2|22 
user3|23 

參考:如何使用python records 庫優雅的操作數據庫


免責聲明!

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



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