У меня есть файл 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
и использовать точку с запятой. SQL в setup.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'
. Я также заменяю '\ n' на '\ r \ n' из-за linux -> windows.