基于Psycopg2的简化版PostgreSQL客户端
项目描述
Queries 是一个BSD许可证授权的、针对psycopg2库的特定封装,用于与PostgreSQL交互。
流行的psycopg2包是一个功能齐全的Python客户端。遗憾的是,作为一个开发者,您经常需要重复相同的步骤来开始使用该库的应用程序。Queries旨在简化psycopg2的使用,同时添加额外的功能,使编写PostgreSQL客户端应用程序变得既快又容易。请查看下面的用法部分,以了解它有多简单。
主要功能包括
简化API
支持Python 2.7+和3.4+
通过psycopg2cffi支持PyPy
对Tornado的异步支持
通过URI提供连接信息
查询结果以基于迭代器的生成器形式交付
自动注册对UUID、Unicode和Unicode数组的支持
直接访问psycopg2 connection 和 cursor 对象的能力
内部连接池
文档
安装
Queries可通过pypi获得,并可以使用easy_install或pip进行安装
pip install queries
用法
Queries提供了一种基于会话的API,用于与PostgreSQL进行交互。在创建会话时,只需传入要连接的PostgreSQL服务器的URI即可。
session = queries.Session("postgresql://postgres@localhost:5432/postgres")
Queries内置的连接池会在可能的情况下重用连接,从而降低连接和重连的开销。
当指定URI时,如果您省略了用于连接的用户名和数据库名,Queries将使用当前操作系统用户名作为两者。您还可以省略URI以连接到本地主机上的端口5432,作为当前操作系统用户连接到以当前用户命名的数据库。例如,如果您的用户名是fred,并且您在发出queries.query时省略了URI,构造的URI将是postgresql://fred@localhost:5432/fred。
如果您更愿意使用单个连接值,queries.uri()方法提供了一种快速简单的方法来创建URI,并将其传递给各种方法。
>>> queries.uri("server-name", 5432, "dbname", "user", "pass")
'postgresql://user:pass@server-name:5432/dbname'
环境变量
目前Queries使用以下环境变量来调整各种配置值。支持的变量有
QUERIES_MAX_POOL_SIZE - 修改连接池的最大大小(默认:1)
使用queries.Session类
要执行查询或调用存储过程,您首先需要创建一个queries.Session类的实例。它可以作为上下文管理器使用,这意味着您可以使用with关键字,并且它会负责清理。有关with关键字和上下文管理器的更多信息,请参阅PEP343。
除了与简单API方法类似的queries.Session.query和queries.Session.callproc方法外,queries.Session类还提供了访问psycopg2连接和游标对象的方式。
使用queries.Session.query
以下示例展示了如何将queries.Session对象用作上下文管理器来查询数据库表
>>> import pprint
>>> import queries
>>>
>>> with queries.Session() as session:
... for row in session.query('SELECT * FROM names'):
... pprint.pprint(row)
...
{'id': 1, 'name': u'Jacob'}
{'id': 2, 'name': u'Mason'}
{'id': 3, 'name': u'Ethan'}
使用queries.Session.callproc
此示例使用queries.Session.callproc来执行存储过程,并将单行结果以字典形式进行格式化输出
>>> import pprint
>>> import queries
>>> with queries.Session() as session:
... results = session.callproc('chr', [65])
... pprint.pprint(results.as_dict())
...
{'chr': u'A'}
与Tornado的异步查询
除了提供Pythonic、同步的PostgreSQL客户端API外,Queries还为Tornado提供了一个非常类似的异步API。在queries.TornadoSession和queries.Session之间,API的主要区别在于TornadoSession.query和TornadoSession.callproc方法返回整个结果集,而不是作为结果集的迭代器。以下示例在异步Tornado Web应用程序中使用TornadoSession.query来发送包含查询结果集的JSON有效负载。
from tornado import gen, ioloop, web
import queries
class MainHandler(web.RequestHandler):
def initialize(self):
self.session = queries.TornadoSession()
@gen.coroutine
def get(self):
results = yield self.session.query('SELECT * FROM names')
self.finish({'data': results.items()})
results.free()
application = web.Application([
(r"/", MainHandler),
])
if __name__ == "__main__":
application.listen(8888)
ioloop.IOLoop.instance().start()
灵感来源
Queries受到了Kenneth Reitz的杰出工作的启发,这些工作可以在requests中找到。
历史
Queries是基于pgsql_wrapper的分支和增强,它可以在Queries的主GitHub存储库的版本1.2.0之前的标签中找到。
项目详情
queries-2.1.1.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | fd49447358a4d83b432cf0b4d34af60fb9c887a6e879b1795412e3424c5f8cd2 |
|
MD5 | c3320a5605d60d0145fe445e814107ff |
|
BLAKE2b-256 | 38ae82c8d9e7d3da6c5265dc695cb751340be47af1276964a86f905a8218d68f |