Records:用于人类的sql™
Records是一个非常简单但功能强大的库,用于对大多数关系数据库进行原始SQL查询
只需编写SQL即可。没有铃声,没有口哨。使用可用的标准工具,这项常见任务可能会出人意料地困难。该库努力使此工作流尽可能简单,同时提供一个优雅的界面来处理您的查询结果
数据库支持包括RedShift、Postgres、MySQL、SQLite、Oracle和MS-SQL(不包括驱动程序)
☤基础知识
我们知道如何编写SQL,所以让我们将一些内容发送到我们的数据库:
import records db = records.Database('postgres://...')
rows = db.query('select * from active_users') # or db.query_file('sqls/active-users.sql')
一次抓取一行:
>>> rows[0]
<Record {"username": "model-t", "active": true, "name": "Henry Ford", "user_email": "model-t@gmail.com", "timezone": "2016-02-06 22:28:23.894202"}>
或者迭代它们:
for r in rows:
print(r.name, r.user_email)
可以通过多种方式访问值:row.user_email
,row['user_email']
,或row[3]
还完全支持包含非字母数字字符(如空格)的字段
或存储您的记录集合的副本以供以后参考:
>>> rows.all()
[<Record {"username": ...}>, <Record {"username": ...}>, <Record {"username": ...}>, ...]
如果您只期待一个结果:
>>> rows.first()
<Record {"username": ...}>
其他选项包括rows.as_dict()
和rows.as_dict(ordered=True)
☤功能
- 迭代行被缓存以供将来引用
$DATABASE_URL
环境变量支持- 便利性
Database.get_table_names
方法 - 用于导出查询的命令行记录工具
- 安全参数化:
Database.query('life=:everything', everything=42)
- 查询可以作为字符串或文件名传递,支持的参数
- 交易记录:
t = Database.transaction(); t.commit()
- 批量操作:
Database.bulk_query()
&Database.bulk_query_file()
唱片公司自豪地由SQLAlchemy和Tablib
☤数据导出功能
Record还具有完全的Tablib集成功能,允许您通过一行代码将结果导出为CSV、XLS、JSON、HTML表、YAML或Pandas DataFrames。非常适合与朋友共享数据或生成报告
>>> print(rows.dataset)
username|active|name |user_email |timezone
--------|------|----------|-----------------|--------------------------
model-t |True |Henry Ford|model-t@gmail.com|2016-02-06 22:28:23.894202
...
逗号分隔值(CSV)
>>> print(rows.export('csv'))
username,active,name,user_email,timezone
model-t,True,Henry Ford,model-t@gmail.com,2016-02-06 22:28:23.894202
...
YAML Ain‘t Markup Language(YAML)
>>> print(rows.export('yaml'))
- {active: true, name: Henry Ford, timezone: '2016-02-06 22:28:23.894202', user_email: model-t@gmail.com, username: model-t}
...
JavaScript对象表示法(JSON)
>>> print(rows.export('json'))
[{"username": "model-t", "active": true, "name": "Henry Ford", "user_email": "model-t@gmail.com", "timezone": "2016-02-06 22:28:23.894202"}, ...]
Microsoft Excel(xls,xlsx)
with open('report.xls', 'wb') as f:
f.write(rows.export('xls'))
熊猫数据帧
>>> rows.export('df')
username active name user_email timezone 0 model-t True Henry Ford model-t@gmail.com 2016-02-06 22:28:23.894202
你说对了。Tablib的所有其他功能也可用,因此您可以对结果进行排序、添加/删除列/行、删除重复项、转置表格、添加分隔符、按列切片数据等
请参阅Tablib Documentation有关更多详细信息,请参阅
☤安装
当然,推荐的安装方法是pipenv:
$ pipenv install records[pandas] ✨🍰✨
☤命令行工具
作为额外的奖励,一个records
自动包括命令行工具。以下是使用信息的截图:
☤,谢谢你
感谢您借阅本图书馆!我希望你会觉得它有用
当然,总有改进的空间。请随意……open an issue所以我们可以把唱片做得更好、更强、更快