Если вы используете sqlite3, у него есть полезное расширение для dbapi, называемое conn.executescript (str), я подключил это через что-то вроде этого, и это, похоже, работает: (Не весь контекст показан, но этого должно быть достаточно чтобы получить дрейф)
def init_from_script(script):
Base.metadata.drop_all(db_engine)
Base.metadata.create_all(db_engine)
# HACK ALERT: we can do this using sqlite3 low level api, then reopen session.
f = open(script)
script_str = f.read().strip()
global db_session
db_session.close()
import sqlite3
conn = sqlite3.connect(db_file_name)
conn.executescript(script_str)
conn.commit()
db_session = Session()
Интересно, это чистое зло? Я тщетно искал «чистый» эквивалент sqlalchemy, возможно, который можно добавить в библиотеку, что-то вроде db_session.execute_script (file_name)? Я надеюсь, что после всего этого db_session будет работать очень хорошо (то есть не нужно перезапускать движок), но пока не уверен ... необходимы дальнейшие исследования (то есть, нужно ли нам получить новый движок или просто сеанс после того, как за спиной sqlalchemy ?)
FYI sqlite3 включает связанную подпрограмму: sqlite3.complete_statement (sql), если вы катите свой собственный анализатор ...