postgres pg8000 创建数据库
Posted
技术标签:
【中文标题】postgres pg8000 创建数据库【英文标题】:postgres pg8000 create database 【发布时间】:2019-05-19 17:52:16 【问题描述】:我正在尝试使用 postgressql 的 pg8000 驱动程序创建数据库,但无法创建。手动创建一个数据库然后连接到它对我来说很好,但我需要用我的代码创建数据库。我收到错误“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.ProgrammingError: (pg8000.ProgrammingError) ('ERROR', '25001', 'CREATE DATABASE cannot run inside a transaction block') [SQL: 'create数据库workDB']""""
请建议我如何创建这个数据库...
【问题讨论】:
请在帖子中添加完整的错误消息 编辑有准确的错误 @tec_abhi 得到这个答案了吗? 【参考方案1】:这里有一个解决方案:
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)语句无法在事务中执行,则会自动避免这样做。
【讨论】:
以上是关于postgres pg8000 创建数据库的主要内容,如果未能解决你的问题,请参考以下文章
sql 用于处理创建Postgres数据库的脚本:```PG :: InvalidParameterValue:ERROR:编码UTF8不是
使用 pg_dump 将 Postgres 从 Windows 迁移到 Linux 时如何选择正确的排序规则来创建数据库?
如何使用来自 SqlAchemy+pg8000 的 SSL 连接到 Postgresql?
sql 用于创建抱怨的Postgres数据库的小脚本:```PG :: InvalidParameterValue:ERROR:编码UTF8与区域设置e不匹配