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

常见的执行报错: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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值