跳转到主要内容

SQL for Humans

项目描述

Records: SQL for Humans™

https://img.shields.io/pypi/v/records.svg

Records是一个非常简单但功能强大的库,用于对大多数关系型数据库执行原始SQL查询。

https://farm1.staticflickr.com/569/33085227621_7e8da49b90_k_d.jpg

只需编写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_emailrow['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 引以为豪地由 SQLAlchemyTablib 提供。

☤ 数据导出功能

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 (12.3 kB 查看哈希值)

上传时间

构建分发

records-0.6.0-py2.py3-none-any.whl (10.0 kB 查看哈希值)

上传时间 Python 2 Python 3

由以下支持