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…
查询,您将无法知道。