【问题标题】:How do I check for open transactions on a psycopg2 connection?如何检查 psycopg2 连接上的打开事务?
【发布时间】:2015-12-23 09:08:31
【问题描述】:

如何检查psycopg2 连接上的未结交易?我打算将它添加到我的单元/功能测试中,因为 Python 的 DB API 使用隐式事务。

【问题讨论】:

    标签: python postgresql transactions psycopg2 python-db-api


    【解决方案1】:

    可以查看连接的status属性:

    from psycopg2.extensions import STATUS_BEGIN, STATUS_READY
    
    if conn.status == STATUS_READY:
        print("No transaction in progress.")
    elif conn.status == STATUS_BEGIN:
        print("A transaction is in progress.")
    

    或者,transaction status 可以通过connection.get_transaction_status() 获得。

    要手动检查正在进行的事务,您可以使用 PostgreSQL 的statistics collector

    SELECT * FROM pg_stat_activity WHERE state = 'idle in transaction';
    

    【讨论】:

    • 还应该检查 STATUS_PREPARED。 (表示交易正在进行中)
    猜你喜欢
    • 2020-09-25
    • 2023-03-18
    • 2011-03-13
    • 1970-01-01
    • 1970-01-01
    • 2010-12-07
    • 2015-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多