[英]Alembic doesn't recognize False default value
在維護 SQLAlchemy 數據 model 並利用 alembic 進行版本控制的同時,我所做的以下代碼更改導致了一個空修訂:
some_column = Column(Boolean, nullable=False, default=False)
雖然以前是:
some_column = Column(Boolean, nullable=False)
因此,添加默認值不會在 alembic 中產生任何變化,即生成一個空修訂。 我嘗試了 SQLAlchemy 提供的其他值,例如false()
和expression.false()
而不是False
,但結果是相同的(空的 alembic 修訂版)。 還嘗試了server_default
而不是default
。 有問題的數據庫是 PostgreSQL。
當然,通過空修訂,我的意思是 alembic 無法識別 SQLAlchemy 中所做的任何更改:
def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
pass
# ### end Alembic commands ###
def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
pass
# ### end Alembic commands ###
感謝這方面的任何幫助。
要自動執行此操作,您必須打開設置以檢測服務器默認更改。
在您的env.py
中,對於context.configure
調用(在線和離線遷移,因此在2 個地方),添加compare_server_default=True
kwarg。
自己放入alter_column
並且絕對使用server_default
可能更安全,因為default
僅用於 python 端的默認設置(這沒關系,但聽起來不是你想要的)。
自動生成可以選擇檢測:
...
更改服務器默認值。 如果將 EnvironmentContext.configure.compare_server_default 參數設置為 True 或自定義可調用 function,則會發生這種情況。 此功能適用於簡單的情況,但不能始終產生准確的結果。
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.