psycopg2连接的线程安全连接管理器。

psycopg2-managed-connection的Python项目详细描述


此包包含一个用于psycopg2的托管连接,该连接提供 对底层psycopg2.connection对象的线程安全独占访问。

这允许许多线程共享同一个连接实例(避免 与建立新PostgreSQL相关的TCP和进程启动成本 并确保线程不会释放与 事务仍在进行中-可能是由于开发人员错误,或者是未处理的 线程与数据库交互时发生异常。

ManagedConnection还将确保 将打开输入托管上下文。

用法

创建托管连接

>>>frompgmanagedconnectionimportManagedConnection>>>>>>dsn='postgres:///postgres'# a libpq connection string>>>manager=ManagedConnection(dsn)>>>manager<ManagedConnection:postgres:///postgres(closed)>

查询

>>>withmanager()asconnection:...cursor=connection.cursor()...cursor.execute('SELECT 1')...cursor.fetchone()...connection.commit()(1,)

处理未提交的事务

<> P>退出上下文管理器时打开事务将导致 RuntimeError。这也会导致任何未结交易隐式地 后退。

>>>withmanager()asconnection:...cursor=connection.cursor()...cursor.execute('SELECT 1')Traceback(mostrecentcalllast):...RuntimeError:Didnotcommitorrollbackopentransactionbeforereleasingconnection.

处理错误

如果未处理的异常是 遇到。

>>>importpsycopg2>>>withmanager()asconnection:...cursor=connection.cursor()...cursor.execute('SELECT 1')...assertmanager.statusispsycopg2.extensions.TRANSACTION_STATUS_INTRANS...raiseNotImplementedError()Traceback(mostrecentcalllast):...NotImplementedError>>>manager.statusispsycopg2.extensions.TRANSACTION_STATUS_IDLETrue

开发

测试

测试套件可以使用make test运行。

它假设postgresql服务器正在运行且可访问。连接详细信息 延迟到底层的libpq实现,默认值可以 使用libpq environment variables指定。

tox也支持作为测试运行程序(如果已安装)。

Docker测试

$ exportPGPORT=5432
$ docker run -dp $PGPORT:5432 postgres
$ PGUSER=postgres make test

如果使用boot2docker,则PGHOST环境变量还需要 设置为虚拟机IP地址。

$ PGUSER=postgres PGHOST=$(boot2docker ip) make test

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

推荐PyPI第三方库


热门话题
java读取SSLSocket的最快或最佳方式   JavaGuice向类构造函数注入对象   java类不是抽象的,并且不会覆盖OnClickListener中的抽象方法onClick(视图)   java OpenGL 1.1更改颜色更改以前的颜色?   c#将Java/Android连接到。网络服务   java在节点上生成AES密钥   java Liferay与MarkLogic XDBC数据库集成   java使用静态初始化块来提高性能   java如何在需要不同参数的另一个方法中使用同一类中的方法   音频Java多种声音   Java显式引用转换   java Intellij,如何在maven项目中导入模块   java在什么条件下调用ELResolver的setValue方法?   java在beanshell中计算代码字符串并获取beanshell解释器返回的值   javascript将音频文件上载到服务器并从服务器响应设置图像   编码风格清理java代码,多个else if语句   java是否需要使此变量可变?   java线程未更新GlassPane上的进度条   java关闭调试模式@Vaadin Spring启动应用程序