SQL for Humans
项目描述
Records: SQL for Humans™
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 方法。
命令行 records 工具用于导出查询。
安全参数化: Database.query('life=:everything', everything=42)。
查询可以作为字符串或文件名传递,支持参数。
事务: t = Database.transaction(); t.commit()。
批量操作: Database.bulk_query() & Database.bulk_query_file()。
Records 引以为豪地由 SQLAlchemy 和 Tablib 提供。
☤ 数据导出功能
Records 还提供了完整的 Tablib 集成,允许您通过一行代码将结果导出为 CSV、XLS、JSON、HTML 表格、YAML 或 Pandas DataFrame。非常适合与朋友共享数据或生成报告。
>>> 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 Object Notation (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'))
Pandas DataFrame
>>> 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 文档。
☤ 安装
当然,推荐的安装方法是 pipenv
$ pipenv install records[pandas] ✨🍰✨
☤ 感谢
感谢您查看这个库!希望您觉得它很有用。
当然,总有改进的空间。请随时 打开一个问题,以便我们可以使 Records 更好、更强、更快。
v0.6.0 (04-29-2024)
仅支持 Python 3.6+。
支持 SQLAlchemy 2+。
由于迁移到 SQLAlchemy 2+,已取消对 Python 2.7 和 3.4 的支持。
v0.5.1 (09-01-2017)
依赖于 tablib[pandas]。
支持批量查询: Database.bulk_query() & Database.bulk_query_file()。
v0.5.0 (11-15-2016)
支持事务: t = Database.transaction(); t.commit()
v0.4.3 (02-16-2016)
蛋糕是个谎言。
v0.4.2 (02-15-2016)
打包修复。
v0.4.1 (02-15-2016)
Python 3 的错误修复。
v0.4.0 (02-13-2016)
重构以完全由 SQLAlchemy 提供动力!
支持所有主要数据库(感谢 SQLAlchemy!)。
支持非字母数字列名。
引入了新的 Record 类,用于表示/访问结果行。
ResultSet 重命名为 RecordCollection。
从 CLI 中删除了交互模式。
v0.3.0 (02-11-2016)
新的 record 命令行工具可用!
各种改进。
v0.2.0 (02-10-2016)
结果现在表示为 Record,一个具有字典特性的 namedtuples 类。
新的 ResultSet.export 方法,用于导出到各种格式。
现在可以切片 ResultSet,并返回一个新的 ResultSet。
大量错误修复和改进!
v0.1.0 (02-07-2016)
初始发布。
项目详情
下载文件
下载适合您平台的文件。如果您不确定该选择哪个,请了解有关安装包的更多信息。
源分发
构建分发
records-0.6.0.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 320265b94ae87ca5d22643811aa199ce8a8c50d50064053b1a9a54e6ae565d9f |
|
MD5 | e556921f8ceffc4ef5a6d4cdcdd783e1 |
|
BLAKE2b-256 | ff8f93d4cf7f9d4a5719b582287ca378d028927be2de997c17f830d193c7c27e |
records-0.6.0-py2.py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 078acc32ef0ebf28e14374e4914cfcc37ec7a9bbbd6eaff9a4a315537cf9465b |
|
MD5 | 752e813a7597e550d919b655ba6976fd |
|
BLAKE2b-256 | fa9f12ef0f5a187d3f653018f1de03e004570521e574d24a33bd9af27014babf |