首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >postgres pg8000创建数据库

postgres pg8000创建数据库
EN

Stack Overflow用户
提问于 2018-12-19 17:08:22
回答 1查看 524关注 0票数 2

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

代码语言:javascript
复制
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")

我也尝试了下面的方法-

代码语言:javascript
复制
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 database workDB‘“

请建议我如何创建这个数据库…

EN

回答 1

Stack Overflow用户

发布于 2020-10-11 17:18:01

这里有一个解决方案:

代码语言:javascript
复制
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()之前自动执行begin transaction。这是很好的,直到你开始执行一个不能在事务中执行的命令。在这种情况下,您必须进入自动提交模式,该模式在语句之前隐式启动一个事务,然后提交它,但如果(如CREATE DATABASE)该语句不能在事务内执行,则自动避免执行此操作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53847829

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档