Postgres PG8000创建数据库



我正在尝试使用PG8000 PostGressQL驱动程序创建数据库,但无法创建。手动创建数据库,然后连接到它可以与我搭配使用,但是我需要用代码创建DB。我会遇到错误" sqlalchemy.exc.programmingerror :( pg8000.programmingerror)"。我尝试了以下代码来创建DB。

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")

我也尝试了以下 -

from sqlalchemy import create_engine
from sqlalchemy.engine import url
settings ={"drivername" : "postgresql+pg8000", "host" : "myip","port" : 5432,"username" : "user","password" : "pswd","database" : "MyTestDB"}
db=create_engine(url.URL(**settings))
db.execute("commit")

这是我遇到的确切错误,"" sqlalchemy.exc.programmingerror :( pg8000.programmingerror)('错误','25001','创建数据库无法在交易块中运行')[sql:sql:'创建创建数据库WorkDB']""

请建议我如何创建此DB ...

这是一个解决方案:

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

文档讨论了执行在交易中无法运行的命令的问题。问题是,如果尚未进行交易,则PG8000会在任何Execute()之前自动执行开始事务。这很好,直到您执行无法在交易中执行的命令。在这种情况下,您必须输入自动企业模式,该模式隐含在语句之前启动事务并在此之后进行提交,但是如果(例如创建数据库)无法在交易中执行语句。/div>

相关内容

  • 没有找到相关文章

最新更新