【发布时间】:2016-06-02 19:45:59
【问题描述】:
在psycopg2,我可以将连接设置为只读模式:
connection.set_session(readonly=True)
但是我怎么知道连接是否处于只读模式?
【问题讨论】:
标签: python postgresql psycopg2
在psycopg2,我可以将连接设置为只读模式:
connection.set_session(readonly=True)
但是我怎么知道连接是否处于只读模式?
【问题讨论】:
标签: python postgresql psycopg2
从 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 ... 查询,您将无法知道。
试试看:
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
【讨论】: