面向人类的sql
records的Python项目详细描述
记录:SQL for Humans™
records是一个非常简单但功能强大的库,用于生成原始sql查询 到大多数关系数据库。
只需编写sql。没有铃铛,没有口哨。这个常见的任务可以是 使用现有的标准工具非常困难。 这个库力求使这个工作流尽可能简单, 同时提供一个优雅的接口来处理查询结果。
数据库支持包括redshift、postgres、mysql、sqlite、oracle和ms-sql(不包括驱动程序)。
如果你对资助Kenneth Reitz开源感兴趣,可以考虑visiting this link。您的支持对激励的可持续性有很大帮助,因为开源不再是我日常工作的一部分。
基础
我们知道如何编写sql,所以让我们发送一些到我们的数据库:
importrecordsdb=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"}>
或者迭代它们:
forrinrows: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()&;Databse.bulk_query_file()。
唱片公司自豪地由SQLAlchemy提供动力 还有Tablib。
数据导出功能
记录还具有完整的tablib集成,并允许您导出 使用一行代码将结果转换为csv、xls、json、html表、yaml或pandas数据帧。 非常适合与朋友共享数据或生成报告。
>>> 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不是标记语言(yaml)
>>>print(rows.export('yaml'))-{active:true,name:HenryFord,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)
withopen('report.xls','wb')asf:f.write(rows.export('xls'))
pandas数据帧
>>>rows.export('df')usernameactivenameuser_emailtimezone0model-tTrueHenryFordmodel-t@gmail.com2016-02-0622:28:23.894202
你明白了。Tablib的所有其他功能也可用, 因此,您可以对结果排序、添加/删除列/行、删除重复项, 转置表、添加分隔符、按列分割数据等等。
见Tablib Documentation 更多细节。
命令行工具
作为额外的好处,一个records命令行工具将自动 包括。下面是使用信息的屏幕截图:
V0.5.1(2017年1月9日)
- 依赖于tablib[pandas]。
- 支持批量静默:Database.bulk_query()&;Database.bulk_query_file()。
V0.5.0(2016年11月15日)
- 对事务的支持:t = Database.transaction(); t.commit()
V0.4.3(2016年2月16日)
- 蛋糕是谎言。
V0.4.2(2016年2月15日)
- 包装固定。
V0.4.1(2016年2月15日)
- python 3的错误修复。
v0.4.0(02-13-2016)
- 重构完全由sqlalchemy支持!
- 支持所有主要数据库(T汉克斯,炼金术!).
- 支持非字母数字列名。
- 新的Record类,用于表示/访问结果行。
- ResultSet已重命名RecordCollection。
- 已从cli中删除交互模式。
V0.3.0(2016年11月2日)
- 新的record命令行工具可用!
- 各种改进。
v0.2.0(2016年10月2日)
- 结果现在表示为
Record
,这是一个namedtuples类,具有类似dict的特性。 - 新的
ResultSet.export
方法,用于导出到各种格式。 - 切片a
ResultSet
现在可以工作,并产生一个新的ResultSet
。 - 很多错误修复和改进!
v0.1.0(2016年7月2日)
- 初次发布。