【发布时间】:2016-07-24 19:21:13
【问题描述】:
我正在尝试使用 python 函数来执行 .sql 文件。
sql 文件以DROP DATABASE 语句开头。
.sql 文件的第一行如下所示:
DROP DATABASE IF EXISTS myDB;
CREATE DATABASE myDB;
.sql 文件的其余部分定义了“myDB”的所有表和视图
Python 代码:
def connect():
conn = psycopg2.connect(dbname='template1', user='user01')
conn.set_isolation_level(psycopg2.extensions.ISOLATION_LEVEL_AUTOCOMMIT)
cursor = conn.cursor()
sqlfile = open('/path/to/myDB-schema.sql', 'r')
cursor.execute(sqlfile.read())
db = psycopg2.connect(dbname='myDB', user='user01')
cursor = db.cursor()
return db,cursor
当我运行 connect() 函数时,DROP DATABASE 语句出现错误。
错误:
psycopg2.InternalError: DROP DATABASE cannot be executed from a function or multi-command string
我花了很多时间在谷歌上搜索这个错误,但我找不到解决方案。
我还尝试将 AUTOCOMMIT 语句添加到 .sql 文件的顶部,但它没有改变任何内容。
SET AUTOCOMMIT TO ON;
我知道 postgreSQL 不允许您删除当前连接的数据库,但我认为这不是问题所在,因为我通过连接到 template1 数据库开始 connect() 函数,并从该连接创建打开 .sql 文件的游标对象。
有没有其他人遇到过这个错误,有没有办法使用 python 函数来执行 .sql 文件?
【问题讨论】:
-
您可能想要创建和删除模式,而不是数据库。
-
@GordonLinoff - 我意识到我可以解决这个问题,我需要在 py 代码中创建/删除数据库的原因是因为我正在处理的项目将其设置为要求. py代码运行一个游戏应用,每个新的游戏实例都会生成一个全新的数据库。
-
。 .在 Postgres 中删除 数据库 有点像删除整个服务器。通常,您会想要删除存储在架构中的一堆相关表、函数等:postgresql.org/docs/9.4/static/sql-createschema.html。
标签: python sql postgresql python-2.7 psycopg2