postgis如何在程序中自动创建数据库

mac2025-12-08  6

常见的执行报错:psycopg2.InternalError: CREATE DATABASE cannot run inside a transaction block

原因:不能再一个事务中创建数据库,建库操作需要在事务外部运行

原因可参考: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

最新回复(0)