我想使用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
我花了很多时间在谷歌上搜索这个错误,但是找不到解决办法。
我还尝试在.sql文件的顶部添加AUTOCOMMIT语句,但没有任何变化。
SET AUTOCOMMIT TO ON;
我知道postgreSQL不允许你删除当前连接的数据库,但我认为这不是问题的原因,因为我在connect()函数中开始连接到template1数据库,并从该连接创建游标对象来打开.sql文件。
是否有其他人遇到过这个错误,有没有办法使用python函数执行.sql文件?