面向人类的sql

records的Python项目详细描述


记录:SQL for Humans™

https://img.shields.io/pypi/v/records.svghttps://travis-ci.org/kennethreitz/records.svg?branch=masterhttps://img.shields.io/badge/SayThanks.io-☼-1EAEDB.svg

records是一个非常简单但功能强大的库,用于生成原始sql查询 到大多数关系数据库。

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

只需编写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_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()&;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 更多细节。

安装

当然,推荐的安装方法是pipenv

$ pipenv install records[pandas]
✨?✨

命令行工具

作为额外的好处,一个records命令行工具将自动 包括。下面是使用信息的屏幕截图:

Screenshot of Records Command-Line Interface.

谢谢

谢谢你检查这个图书馆!希望你觉得有用。

当然,总有改进的余地。请随意open an issue以便我们可以使记录更好、更强、更快。

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方法,用于导出到各种格式。
  • 切片aResultSet现在可以工作,并产生一个新的ResultSet
  • 很多错误修复和改进!

v0.1.0(2016年7月2日)

  • 初次发布。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
javajavax。艾尔。PropertyNotFoundException:   java为什么通过TCP发送的文件比它本身包含的文件包含更多的数据?   java为什么字符开关/案例不起作用?   php到java连接器,在哪里可以找到好的连接器   需要帮助Java简单规则形状面积计算器和if语句吗   macos如何从newstyle Oracle Java OSX捆绑包结构启动帮助页?   java既然所有的类都扩展对象,而对象是一个类,那么对象如何扩展对象呢?   java从JavaPairdd<String,Tuple2<Integer,Integer>>转换为JavaPairdd<String,Integer>   java微调器值未从一个活动传递到另一个活动   参数化类型的java数组   java不提供类。getCanonicalName是否存在性能问题?   java输入键JTextField   为什么我不能在java中调用nextLine()方法两次?   JTextPane中的java JProgressBar   java如何获取Crudepository实例?   用于提取几个<div>标记的java正则表达式   java如何使用JUnit Testrunner生成html图像   Go中Java静态属性的等价性