zar*_*vic 9 python database postgresql sqlalchemy alembic
在维护 SQLAlchemy 数据模型并利用 alembic 进行版本控制时,我所做的以下代码更改导致了空修订:
some_column = Column(Boolean, nullable=False, default=False)
Run Code Online (Sandbox Code Playgroud)
以前是:
some_column = Column(Boolean, nullable=False)
Run Code Online (Sandbox Code Playgroud)
因此添加默认值不会对 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 ###
Run Code Online (Sandbox Code Playgroud)
感谢这方面的任何帮助。
要自动执行此操作,您必须打开一项设置来检测服务器默认更改。
在您的 中env.py,对于context.configure调用(在线和离线迁移,因此在2 个位置),添加一个compare_server_default=Truekwarg。
直接放入alter_column自己并绝对使用可能更安全server_default,因为default仅用于默认值的 python 端设置(这是可以的,但听起来不是你想要的)。
自动生成可以选择检测:
...
更改服务器默认值。如果将 EnvironmentContext.configure.compare_server_default 参数设置为 True 或自定义可调用函数,则会发生这种情况。此功能适用于简单的情况,但并不总是能产生准确的结果。
...
小智 8
只需传入false()kwarg server_defaultin即可Column。
参考: https: //docs.sqlalchemy.org/en/14/core/sqlelement.html
from sqlalchemy.sql import false
some_column = Column(Boolean, server_default=false(), nullable=False)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6549 次 |
| 最近记录: |