postgresql postgres pg8000创建数据库

bzzcjhmw  于 2023-03-29  发布在  PostgreSQL
关注(0)|答案(1)|浏览(161)

我试图用postgressql的pg 8000驱动程序创建一个数据库,但无法创建。手动创建一个数据库,然后连接到它对我来说很好,但我需要用我的代码创建数据库。我得到错误“sqlalchemy.exc.ProgrammingError:(pg8000.ProgrammingError)"。我已经尝试了下面的代码来创建数据库。

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.编程错误:(pg8000.ProgrammingError)('ERROR ',' 25001','CREATE DATABASE cannot run inside a transaction block')[SQL:'create database workDB']"""”
请建议我如何创建这个DB...

zvms9eto

zvms9eto1#

这里有一个解决方案:

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

文档讨论了执行不能在事务中运行的命令的问题。(),如果没有正在进行的事务。这是很好的,直到你来执行一个命令,不能在事务内执行。在这种情况下,你必须进入自动提交模式,它隐式地在语句之前启动一个事务,然后提交它,但是如果(像CREATE DATABASE一样)语句不能在事务中执行,它会自动避免这样做。

相关问题