【问题标题】:How to read the readonly status on psycopg2?如何读取 psycopg2 上的只读状态?
【发布时间】:2016-06-02 19:45:59
【问题描述】:

在psycopg2,我可以将连接设置为只读模式:

connection.set_session(readonly=True)

但是我怎么知道连接是否处于只读模式?

【问题讨论】:

    标签: python postgresql psycopg2


    【解决方案1】:

    从 psycopg2 v2.7 开始,您可以使用 connection.readonly 属性来确定连接是处于只读模式 (True) 还是读/写模式 (False)。

    如果您运行的是早期版本,则可以执行查询:

    SHOW transaction_read_only;
    

    对于只读模式,其值为 'on',对于读/写模式,其值为 'off'。

    【讨论】:

    • 请注意,connection.readonly 也可以是 None,文档中的意思是“使用 default_transaction_read_only 为服务器配置的默认值”。我想如果你通过connection.set_session(readonly=True) 设置它,它只会设置.readonly 属性,但也许你可以在SQL 中这样做,它仍然是None。此外,如果数据库是只读的,如果没有 SHOW ... 查询,您将无法知道。
    【解决方案2】:

    试试看:

    conn.set_session(readonly=True)
    try:
        cursor.execute('create table xyz (a int)')
        cursor.execute('drop table xyz')
    except psycopg2.InternalError, e:
        print e.message
    

    输出:

    cannot execute CREATE TABLE in a read-only transaction
    

    【讨论】:

    • 感谢您的回答!但是用户没有创建表的权限,我不知道数据库结构。有没有通用的方法来做这个测试?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-13
    • 2022-11-22
    • 1970-01-01
    • 2019-08-16
    • 2021-11-14
    相关资源
    最近更新 更多