2009-05-15 3 views
7

私は、MySQLデータベースを指しengineがあるとします。SQLAlchemyのエンジンのSQLダイアレクトでDDLを使ってファイルを生成するには?

engine = create_engine('mysql://arthurdent:[email protected]/dtdb', echo=True) 

私はでテーブル、FKS、などとdtdbを移入することができます

metadata.create_all(engine) 

含まれているSQLファイルを生成するための簡単な方法がありますこれらのDDLステートメントを実際にdtdbに適用するのではなく、すべてのDDLステートメントを使用しますか?

これまでのところ、私はecho=Trueで生成されたSQLAlchemyログ出力をキャプチャして手作業で編集していました。しかし、あまりにも痛いです。

SAにはかなり精巧なスキーマ管理APIがあるようですが、スキーマ定義をテキストとしてストリーミングする例はありません。

答えて

13

クイックアンサーはSQLAlchemy 0.8 FAQです。

はSQLAlchemyの0.8では、構文が簡略化されているSQLAlchemyの0.9では

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

を行う必要があります。

もう少し答えが出るにはまだ若干の問題があります。型のリテラルのエンコーディングと同様です。しかし、これは誰もがかゆみを掻き立てて傷つけるほどの大きな問題ではありません。あなたはいつでもSQLAlchemyにプログラムで空のデータベースを作成させ、そこからSQLをダンプすることができます。

より困難な問題は、スキーマの移行の処理です。ここではSQLAlchemy-migrateがお手伝いします。

+0

このFAQリンクは私が必要なものです。ありがとう! :) 私は、移行のようなスキーマ管理を探していませんでした。単純に、エンジンエコー出力を使わずにDDLを取得するための単純なハッキングが必要でした。 –

+0

これはPython 0.9で変更されたようです。また、FAQは0.9のために存在しないようです。 –

+0

2番目の構文はSQLAlchemy 1.0.12では機能しませんでした。https://groups.google.com/d/topic/sqlalchemy/r9neOsc64wc/discussion –