Как создать файл с DDL в механизме SQL движка в SQLAlchemy? - PullRequest
8 голосов
/ 16 мая 2009

Предположим, у меня есть engine, указывающий на базу данных MySQL:

engine = create_engine('mysql://arthurdent:answer42@localhost/dtdb', echo=True)

Я могу заполнить dtdb таблицами, FK и т. Д. По:

metadata.create_all(engine)

Существует ли простой способ создания файла SQL, который содержит все операторы DDL, вместо фактического применения этих операторов DDL к dtdb?

До сих пор я прибегал к захвату вывода журнала SQLAlchemy, создаваемого echo=True, и редактированию его вручную. Но это слишком больно.

Похоже, что SA имеет довольно сложный API управления схемами, но я не видел примеров простой потоковой передачи определений схемы в виде текста.

1 Ответ

14 голосов
/ 16 мая 2009

Быстрый ответ - в SQLAlchemy 0.8 FAQ .

В SQLAlchemy 0.8 вам нужно сделать

engine = create_engine(
'mssql+pyodbc://./MyDb',
strategy='mock',
executor= lambda sql, *multiparams, **params: print (sql.compile(dialect=engine.dialect)))

В SQLAlchemy 0.9 синтаксис упрощен.

engine = create_engine(
'mssql+pyodbc://./MyDb',
strategy='mock',
executor= lambda sql, *multiparams, **params: print (sql)

Более длинный ответ заключается в том, что при захвате выходных данных все еще есть небольшие проблемы. Как и при кодировании литералов типов. Но это не было достаточно большой проблемой для любого, чтобы подойти и поцарапать свой зуд. Вы всегда можете позволить SQLAlchemy программно создать пустую базу данных и вывести оттуда SQL.

Более сложная проблема - обработка миграций схемы. Вот где SQLAlchemy-migrate может помочь вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...