我有一个SQL文件,其中包含一些我想针对数据库执行的数据库初步设置。该文件包含需要分批执行的SLQ(由GO语句分隔):
CREATE SCHEMA foo
GO
CREATE SEQUENCE [foo].[generateId]
AS [INT]
START WITH 61148
INCREMENT BY 1
MINVALUE -2147483648
MAXVALUE 2147483647
CACHE
我目前正在尝试这样做:
with open("setup.sql") as f:
with self.session() as sess:
sess.execute(f.read())
但是,我收到一个错误,说Incorrect syntax near 'GO'
。如果我要从文件中删除架构的创建(以及其中的GO),然后执行以下操作,则所有工作:
with open(sql_file) as f:
with self.session() as sess:
sess.execute("CREATE SCHEMA foo")
sess.execute(f.read())
我还尝试通过以下方式将回车符添加到原始SQL:
with open(sql_file) as f:
sql = f.read()
sql = sql.replace('\n', '\r\n')
with self.session() as sess:
sess.execute(sql)
仍然出现Incorrect syntax near 'GO'
错误。
编辑:我也尝试过删除GO
并使用分号。 setup.sql
中的SQL如下所示:
CREATE SCHEMA foo;
CREATE SEQUENCE [foo].[generateTsId]
AS [INT]
START WITH 61148
INCREMENT BY 1
MINVALUE -2147483648
MAXVALUE 2147483647
CACHE
;
然后我得到Incorrect syntax near the keyword 'CREATE'
。由于Linux-> Windows,我还将'\ n'替换为'\ r \ n'。