Python 如何读取psycopg2上的只读状态?

Python 如何读取psycopg2上的只读状态?,python,postgresql,psycopg2,Python,Postgresql,Psycopg2,在psycopg2上,我可以使用以下选项将连接设置为只读模式: connection.set_session(readonly=True) 但是如何知道连接是否处于只读模式?试试: conn.set_session(readonly=True) try: cursor.execute('create table xyz (a int)') cursor.execute('drop table xyz') except psycopg2.InternalError, e:

psycopg2
上,我可以使用以下选项将连接设置为只读模式:

connection.set_session(readonly=True)
但是如何知道连接是否处于只读模式?

试试:

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

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

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

SHOW transaction_read_only;

只读模式的值为
'on'
,读/写模式的值为
'off'

谢谢您的回答!但是用户没有创建表的权限,我也不知道数据库结构。是否有一种通用的方法来进行此测试?请注意,
connection.readonly
也可以是
None
,文档中的意思是“使用
default\u transaction\u readonly为服务器配置的默认值”。我想如果你通过
connection.set_session(readonly=True)
设置它,它只会设置
.readonly
属性,但也许你可以在SQL中这样做,它仍然是
None
。另外,如果数据库是只读的,如果没有
SHOW…
查询,您将无法知道。