【问题标题】:Ignoring existing table when ./manage.py migrate./manage.py 迁移时忽略现有表
【发布时间】:2015-05-07 15:28:06
【问题描述】:

我有一个关于 Django 在存在表时的迁移功能的问题。

ContentData
ContentType
Faq
UserLog
TB_TEAM_INF

当我尝试执行“./manage.py migrate”以便它可以从 models.py 创建上面的 5 个表时,我收到一条错误消息,因为存在一个现有表 TB_TEAM_INF。

由于 TB_TEAM_INF 是另一个团队正在使用的表,我无法删除该表。由于项目的限制,我也不能使用单独的数据库。在这种情况下,我打开 0001_initial.py 之类的迁移文件并在迁移期间临时手动删除模型对象 TB_TEAM_INF。

有没有更好的方法在“./manage.py migrate”时忽略现有表而不是手动编辑迁移文件?

我尝试了 --exclude=TB_TEAM_INF 或 --ignore=TB_TEAM_INF 选项与 ./manage.py migrate 但似乎这些选项不被接受。我正在使用 Django 1.7.2。

【问题讨论】:

    标签: python django database migrate manage.py


    【解决方案1】:

    managed 选项添加到您的模型定义中:

    class TB_TEAM_INF(models.Model):
        ...
        class Meta:
            managed = False
    

    文档摘录:

    如果为 False,则不会对该模型执行任何数据库表的创建或删除操作。

    【讨论】:

    • 这太棒了!非常感谢您的善意建议,catavaran。
    • 是的,它有效。要更新字段,我必须添加 makemigrations; migrate --run-syncdb
    猜你喜欢
    • 1970-01-01
    • 2017-10-17
    • 1970-01-01
    • 2013-12-12
    • 2014-10-28
    • 2017-04-21
    • 2016-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多