我正在尝试使用postgressql的pg8000驱动程序创建数据库,但是无法创建。手动创建一个数据库,然后连接到它对我来说很好用,但是我需要用我的代码创建数据库。我收到错误“ sqlalchemy.exc.ProgrammingError:(pg8000.ProgrammingError)”。我已经尝试过以下用于创建数据库的代码。
VelocityJS: First argument (scroll) was not a property map, a known action, or a registered redirect. Aborting.
Zt @ velocity.min.js:1111
我也在下面尝试过-
from sqlalchemy import create_engine
dburl = "postgresql+pg8000://user:pswd@myip:5432/postgres/"
engine = create_engine(dburl)
conn = engine.connect()
conn.execute("COMMIT")
conn.execute("CREATE DATABASE qux")
这是确切的错误,我正在获取“”“ sqlalchemy.exc.ProgrammingError:(pg8000.ProgrammingError)('ERROR','25001','CREATE DATABASE无法在事务块内运行')[SQL:'create数据库workDB']“”“”
请建议我如何创建此数据库...
答案 0 :(得分:0)
这是一个解决方案:
from sqlalchemy import create_engine
dburl = "postgresql+pg8000://user:pswd@myip:5432/postgres/"
engine = create_engine(dburl)
conn = engine.connect()
con.rollback() # Make sure we're not in a transaction
con.autocommit = True # Turn on autocommit
conn.execute("CREATE DATABASE qux")
con.autocommit = False # Turn autocommit back off again
docs讨论了执行无法在事务中运行的命令的问题。事实是,如果尚无正在进行的事务,pg8000会在任何execute()之前自动执行开始事务。除非您开始执行无法在事务内执行的命令,否则这没问题。在这种情况下,您必须进入自动提交模式,该模式在语句之前隐式启动事务,然后在语句之后提交,但是如果语句(例如CREATE DATABASE)无法在事务中执行,则会自动避免这样做。