【问题标题】:Django Evolution: How do I add a new field at a specific position?Django Evolution:如何在特定位置添加新字段?
【发布时间】:2010-11-12 15:35:54
【问题描述】:

有没有办法告诉 Django Evolution 在数据库表的特定位置添加一个新字段,类似于 (My)SQL 的 AFTER 语句? 我有一个包含一些列的表,我想在 column1 之后添加 new_column。直接使用 SQL 我会这样做:

ALTER TABLE  `db_table` ADD  `new_column` DATETIME NULL DEFAULT NULL AFTER  `column1`

对于 Django Evolution,这转换为:

MUTATIONS = [
    AddField('DbTable', 'new_column', models.DateTimeField, null=True, ...)
]

但是,这会将 new_column 添加到表的 end 中,我可以为上述语句中的点传递一些东西来更好地控制顺序吗?

【问题讨论】:

    标签: python django django-models django-evolution


    【解决方案1】:

    Django 不依赖也不关心数据库中的列位置。我的猜测是 Django Evolution 的工作方式相同。

    所以你也不应该过于依赖或关心数据库内部,这就是你使用 ORM 的原因,对吧?

    如果你真的必须这样做,我建议继承django_evolution.mutations.AddField并覆盖add_column方法以将AFTER语句集成到该方法返回的SQL语句列表中。可能有更好的地方,这将是一个 hack。

    【讨论】:

    • 在很多情况下,您非常关心 ORM 下的数据库。
    • 但是表中列的顺序?
    猜你喜欢
    • 2021-02-07
    • 2020-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-25
    • 1970-01-01
    相关资源
    最近更新 更多