来自https://wiki.postgresql.org/wiki/Psycopg2_Tutorial
PostgreSQL没有自动提交功能,这意味着所有 查询将在交易中执行。
在事务中执行是一件好事,它可以确保数据 完整性,并允许适当的错误处理。但是有 无法在交易中运行的查询。拿 以下示例。
#/usr/bin/python2.4 # # import psycopg2 # Try to connect try: conn=psycopg2.connect("dbname='template1' user='dbuser' password='mypass'") except: print "I am unable to connect to the database." cur = conn.cursor() try: cur.execute("""DROP DATABASE foo_test""") except: print "I can't drop our test database!"
此代码实际上会失败,并显示“我不能 删除我们的测试数据库!“ PostgreSQL无法删除 交易,它是全有或全无的命令。 如果要删除 数据库,您将需要更改数据库的隔离级别 这是通过以下操作完成的。
conn.set_isolation_level(0)
您应将以上内容放在DROP DATABASE的紧前面 光标执行。
我想知道为什么
“ PostgreSQL没有自动提交功能,这意味着所有查询都将在事务中执行。”
“ PostgreSQL无法删除事务中的数据库”
“如果要删除数据库,则需要更改数据库的隔离级别”
谢谢。
更新: What does autocommit mean in postgresql and psycopg2?回答我的问题
答案 0 :(得分:1)
这3个都与Python及其数据库连接器库有关,与PostgreSQL本身无关:
autocommit
,默认情况下它是活动的-这意味着每个SQL语句都将立即执行。启动事务块时,将禁用此自动提交模式,直到您完成事务(通过COMMIT或ROLLBACK)postgres
)