原因:不能再一个事务中创建数据库,建库操作需要在事务外部运行
原因可参考:http://initd.org/psycopg/docs/connection.html
commit()
将任何未决的事务提交到数据库。
默认情况下,Psycopg在执行第一个命令之前会打开一个事务:如果不调用commit(),则任何数据操作的效果都会丢失。
解决方案:在“自动提交”模式下设置连接:没有事务自动打开,命令立即生效。设置自动提交模式
隔离级别常量参考
两种方法:
一、conn.set_isolation_level(psycopg2.extensions.ISOLATION_LEVEL_AUTOCOMMIT) import psycopg2 from psycopg2.extensions import ISOLATION_LEVEL_AUTOCOMMIT # <-- ADD THIS LINE con = psycopg2.connect(...) # 设置事务隔离级别 con.set_isolation_level(ISOLATION_LEVEL_AUTOCOMMIT) # <-- ADD THIS LINE cur = con.cursor() sql = "CREATE DATABASE {0};".format(self.db_name) cur.execute(sql) cur.close() con.close()二、con.autocommit = True
import psycopg2 con = psycopg2.connect(...) con.autocommit = True cur = con.cursor() cur.execute('CREATE DATABASE {};'.format(db_name)) cur.close() # 如果连接不关闭,则需要改回连接对象的autocommit 属性 con.autocommit = False # 如果连接关闭,则不需要执行上面这行代码 # con.close()
连接:https://www.cnblogs.com/yungiu/p/10983792.html
