使用过Python的朋友,或多或少都会涉及到关于DB的操作;底层的工具有像pymysql、MySQLdb,高级的ORM有像sqlarchemy等等。今天推荐的介于他们之间的轻量级DB库--records。
日常工作中一不小心就要操作MySQL这样的数据库,之前使用过的MySQL库包括pymysql、MySQLdb、sqlarchemy。虽然都可以使用并能满足日常的工作,但是当我遇到records之后,就开始犯起了“喜新厌旧”的老毛病了!
那么,records有哪些优点呢?首先它不像pymysql这类工具,需要直接操作游标这类对象;其次它不像sqlarchemy这样需要先写DB模型才能执行操作。那么它是怎么操作的呢?
pip install records
import records
db = records.Database('mysql+pymysql://username:password@localhost/dbname?charset=utf8')
rows = db.query("select * from tablename")
for row in rows:
print(row.field1, row.field2, row.field3)
可以看到,一共只需四行代码就可以实现DB对象级的数据查询。这才是真正的为人类服务的库。忘了说了,records
的作者与requests
的作者正是同一个大神!!!
另外,从连接DB的参数也可以知道,records
并不是只能支持mysql
,它还可以支持很多其它的关系型DB,比如:RedShift, Postgres, MySQL, SQLite, Oracle, and MS-SQL等等,当然前提是底层的对应驱动库需要先安装好了!
在records
的世界,执行sql
只有一个方法,那就是query
。不管是查询、更新、删除,都只有query
一个接口。其它sql
命令,比如:创建表、创建DB等也是同样的接口。所以query
就是execsql的代名词,query
可以做任何事情。
import records
db = records.Database('mysql+pymysql://username:password@localhost/dbname?charset=utf8')
db.query("CREATE DATABASE dbname;")
db.query("USE dbname;")
db.query("SHOW DATABASES;")
除了在连接、查询上面体现了简洁之外,在结果集的输出上面也是令人惊艳!即可以支持索引,也可以支持切片,更可以直接进行迭代。
import records
db = records.Database('mysql+pymysql://username:password@localhost/dbname?charset=utf8')
rows = db.query("select * from tablename")
print(rows[0])
print(rows[2:4])
print(rows.all())
print(rows.first())
print(rows.one())
其它DB库都没有提供这样的看似很常见的功能,但是records就是有。只能用它,用它!
import records
db = records.Database('mysql+pymysql://username:password@localhost/dbname?charset=utf8')
rows = db.query("select * from tablename")
# 查看结果集
print(rows.dataset)
print(rows.export('csv'))
print(rows.export('yaml'))
print(rows.export('json'))
# Pandas DataFrame
rows.export('df')
# excel
with open('report.xls', 'wb') as f:
f.write(rows.export('xls'))
心动了么,赶紧上手吧!