Postgres的提出了“ACTIVE SQL事务”(ERRCODE:25001)
-
26-09-2019 - |
题
我使用的psycopg2在Python中访问我的Postgres数据库。我的函数应该创建一个新的数据库,代码如下所示:
def createDB(host, username, dbname):
adminuser = settings.DB_ADMIN_USER
adminpass = settings.DB_ADMIN_PASS
try:
conn=psycopg2.connect(user=adminuser, password=adminpass, host=host)
cur = conn.cursor()
cur.execute("CREATE DATABASE %s OWNER %s" % (nospecial(dbname), nospecial(username)))
conn.commit()
except Exception, e:
raise e
finally:
cur.close()
conn.close()
def nospecial(s):
pattern = re.compile('[^a-zA-Z0-9_]+')
return pattern.sub('', s)
当我把我的CREATEDB Postgres的服务器抛出一个错误: CREATE DATABASE不能在事务块内运行 与代表 “ACTIVE SQL TRANSACTION” 的错误代码25001。
我敢肯定,有在同一时间,我打电话CREATEDB之前使用的每一个连接没有运行其它连接将被关闭。
解决方案
它看起来像你的光标()实际上是一种交易: http://initd.org/psycopg/docs/cursor.html#cursor
从相同创建光标 连接不分离,即,任何 通过改变一个做数据库 光标是立即可见 其他光标。从游标创建 不同的连接可以或不可以 被分离,这取决于 连接隔离级别。也可以看看 回滚()和commit()方法。
跳到光标,只是执行查询。下降的commit()为好,当你没有打开事务不能提交。
不隶属于 StackOverflow