跳转到主要内容

基于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 connectioncursor 对象的能力

  • 内部连接池

Version Status Coverage License

文档

文档可在https://queries.readthedocs.org找到

安装

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.queryqueries.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.TornadoSessionqueries.Session之间,API的主要区别在于TornadoSession.queryTornadoSession.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 (21.2 kB 查看哈希值)

上传时间

由以下组织支持