簡體   English   中英

Alembic 無法識別 False 默認值

[英]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 端的默認設置(這沒關系,但聽起來不是你想要的)。

引自https://alembic.sqlalchemy.org/en/latest/autogenerate.html#what-does-autogenerate-detect-and-what-does-it-not-detect

自動生成可以選擇檢測:

...

更改服務器默認值。 如果將 EnvironmentContext.configure.compare_server_default 參數設置為 True 或自定義可調用 function,則會發生這種情況。 此功能適用於簡單的情況,但不能始終產生准確的結果。

...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM