我們有一小段代碼使用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中複製的列可能是這樣的:
CREATE TABLE "TableName" (
-- ...
"TimeStamp" DATETIME DEFAULT (GETUTCDATE()) NOT NULL,
-- ...
)
這不起作用,因爲GETUTCDATE()
不是SQLite中的功能。
我要尋找一個勾入SQLAlchemy的DDL編譯器(我猜),我可以修改或抑制DEFAULT
部分取決於價值和方言(S)的產生(例如用DATE('now')
或降更換GETUTCDATE()
與NEWID()
完全)的默認子句)。
我看過this part of the documentation(我們用它來處理交叉編譯期間的某些類型),但我不知道如何使用它來處理DEFAULT
子句。我甚至不確定它是否是正確的工具。我可以破解這個(通過改變SQLAlchemy「創建」後的表),但我更喜歡更通用的解決方案。
+1我在某些情況下已經這樣做了,但'GETUTCDATE'在SQLite中有或多或少的直接等價物,所以我不喜歡使用自定義函數。我目前替換這個「手動」,但這是一個黑客。 – stephan 2012-03-08 10:20:48