Per*_*Man -2 python postgresql psycopg2
当语句中遇到错误时SELECT,显然TRANSACTION保持打开状态。
与 psycopg 建立联系:
# ...
connection.autocommit = False
cur = connection.cursor(cursor_factory=DictCursor)
Run Code Online (Sandbox Code Playgroud)
选择不存在的表:
cur.execute('SELECT * FROM "non_exists_table"') # a incorrect query
Run Code Online (Sandbox Code Playgroud)
psycopg2.errors.UndefinedTable: relation "non_exists_table" does not exist
Run Code Online (Sandbox Code Playgroud)
然后执行另一个查询:
psycopg2.errors.UndefinedTable: relation "non_exists_table" does not exist
Run Code Online (Sandbox Code Playgroud)
psycopg2.errors.InFailedSqlTransaction: current transaction is aborted, commands ignored until end of transaction block
Run Code Online (Sandbox Code Playgroud)
为什么?
是否为所有人psycopg2开放交易execute()?甚至SELECT?!!
是否可以避免在选择查询中启动TRANSACTION?
来自@snakecharmerb的坦克征求意见
\n通过这个参考:
\n\n\n默认情况下,第一次将命令发送到数据库时(使用连接创建的游标之一),将创建一个新事务。
\n
\n\n如果任何命令失败,事务将被中止,并且在调用 rollback() 方法之前不会执行进一步的命令。
\n
解决方案1:
\nconnection.autocommit = True\nRun Code Online (Sandbox Code Playgroud)\n解决方案2:
\nwith psycopg2.connect(DSN) as conn:\n with conn.cursor() as curs:\n curs.execute(SQL)\nRun Code Online (Sandbox Code Playgroud)\n如果块没有引发异常,则提交事务。如果出现异常,事务将回滚。
\n与文件对象或其他资源不同,退出带有块的连接\xe2\x80\x99s 不会关闭连接,而只会关闭与其关联的事务。
\n| 归档时间: |
|
| 查看次数: |
1395 次 |
| 最近记录: |