SQLAlchemyを使用してソースデータベース(ここではMSSQL)をターゲットデータベース(ここではメモリ内のSQLite)にコピーする少しのコードがあります。このコピーの一環として、我々はターゲットにソースからテーブル情報をコピーします。テーブルの作成中にDEFAULT句を変更します
for table in source:
table.tometadata(metadata_target)
# some more stuff (hack: could alter table here)
metadata_target.create_all()
テーブルをコピーする場合、DEFAULT
条項がそのままコピーされます。例えば。 SQLiteの中にコピーされた列には、次のようになります。GETUTCDATE()
はSQLiteの関数ではないので
CREATE TABLE "TableName" (
-- ...
"TimeStamp" DATETIME DEFAULT (GETUTCDATE()) NOT NULL,
-- ...
)
これは動作しません。
私は、例えばDATE('now')
またはドロップでGETUTCDATE()
を置き換える(I変更または値と方言(複数可)に応じて、DEFAULT
部分の発生を抑制することができるいずれかのSQLAlchemyのDDLコンパイラ(私は推測)にフックを探していますNEWID()
の完全なデフォルト句)。
私はthis part of the documentation(クロスコンパイル時に特定のタイプを処理するために使用します)を見ましたが、DEFAULT
の句を処理する方法はわかりません。私はそれが正しいツールであるかどうかも分かりません。私はこれを(SQLAlchemyの「作成」の後にテーブルを変更することで)ハックすることができますが、もっと汎用的なソリューションを好むでしょう。
+1私はこれをいくつかのケースではすでに行っていますが、 'GETUTCDATE'はSQLiteで多かれ少なかれ同等の機能を持っていますので、私はカスタム関数を使いたくありません。私は現在、これを "手動で"置き換えていますが、これはハックです。 – stephan