我使用 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 不能在事务块内运行,错误代码 25001 代表“ACTIVE SQL TRANSACTION”。
我很确定同时没有其他连接在运行,并且我在调用 createDB 之前使用的每个连接都已关闭。