【问题标题】:django 1.7 makemigrations on existed tabledjango 1.7 在现有表上进行迁移
【发布时间】:2014-11-13 18:27:01
【问题描述】:

我想在一个新项目中使用 Django 1.7。 而且我已经有很多记录的数据库。

在许多 Django 教程中, 它演示了如何从一个全新的项目中使用迁移系统。

就我而言,使用 django-admin startapp todo 并将使用名为notesnote 的现有表。 我使用inspectdb 转储notesnote 类并将其写入todo/models.py

class NotesNote(models.Model):
    title = models.CharField(max_length=100)
    text = models.TextField()
    pub_date = models.DateTimeField()
    authors = models.CharField(max_length=10)

然后

python manage.py makemigrations todo

生成todo/migrations/0001_initial.py 那么

python manage.py migrate --fake todo

做一个假迁移(因为表已经存在)。

然后,如果我想修改表格的字段,请添加一个“类别”字段

category = models.CharField(max_length=30)

然后通过以下方式生成0002迁移差异:

python manage.py makemigrations todo

但是,当我进行迁移时

python manage.py migrate todo

我收到如下错误:

django.db.utils.OperationalError: no such table: todo_notesnote

似乎它在现有表的前面添加了应用程序的名称。 我应该执行哪些步骤来对现有表进行可用迁移?

【问题讨论】:

  • 哎呀,我想也许我一开始就错了,我以为“NotesNote”已经存在,所以使用“--fake”
  • 您是否阅读过有关integrating Django with a legacy database 的文档?在那里您可以找到一些有用的建议:特别是您应该在模型的内部 Meta 类中添加一个 db_table = 'NotesNote' 选项。
  • @Baxeico,非常感谢,我从来不认识文档,让我学习一下:)
  • @baxeico 阅读文档后,它的工作原理,非常感谢。虽然我不知道如何将其标记为已解决:(
  • 我添加了我的评论作为答案,阅读etiquette 我可能从一开始就将其添加为anwser。如果您觉得有用,可以将我的回答标记为已接受。

标签: django django-migrations


【解决方案1】:

关于 integrating Django with a legacy database 的文档包含一些对您的用例有用的建议:特别是您应该在内部的 Meta 类中添加一个 db_table = 'notesnote' 选项你的模型。

【讨论】:

    猜你喜欢
    • 2015-03-05
    • 2014-12-13
    • 2014-11-13
    • 2020-06-14
    • 2015-02-13
    • 2015-03-31
    • 1970-01-01
    • 2015-10-31
    • 2014-05-28
    相关资源
    最近更新 更多