【问题标题】:I delete django migrations, but have some errors我删除了 django 迁移,但有一些错误
【发布时间】:2018-06-29 07:42:25
【问题描述】:

我删除所有迁移文件

find . -path "*/migrations/*.py" -not -name "__init__.py" -delete
find . -path "*/migrations/*.pyc"  -delete

然后删除数据库并创建新的,清除。但是当我尝试创建初始迁移并生成数据库架构时:

python manage.py makemigrations

我有错误

django.db.utils.ProgrammingError: (1146, "Table 'buzz_local.api_userprofile' doesn't exist")

为什么? 我不需要任何迁移文件,因为我们需要重新创建当前数据库

【问题讨论】:

  • 删除所有迁移几乎从来都不是正确的做法。你为什么这么做?
  • 是的,我知道。我需要一个没有其他迁移的新初始迁移文件。我在本地机器上做过几次,但现在我遇到了这个问题。这不是产品
  • 在项目中我们需要更改某些字段的类型和其他原因...
  • 那么你应该有squashed迁移,而不是删除它们。
  • 你的数据库中有数据吗?或者你正在创建一个新的

标签: python django database


【解决方案1】:

以前我们也遇到过同样的问题。如果迁移文件夹中的单个文件被删除,可能会造成严重破坏。我们做了以下事情:

正如您所提到的,您正在创建一个新数据库,您可以做的可能是

  1. 删除 migrations 文件夹中的所有文件,留下 __init__.py 文件(如果删除,只需创建一个名为 __init__.py 的新空文件)。

然后尝试makemigrations 命令。大多数情况下,这是可行的,因为所有迁移文件都会重新生成。

  1. 如果上述方法不起作用,则必须手动创建表。这有点辛苦,因为您必须手动在此类表上创建每个字段。如果你不知道如何手动创建(或者担心表会乱),你可以检查任何以前的 Django 项目的数据库,并检查为不同类型的每个字段赋予了哪些属性。

如果您正确实施程序,第 2 步就不会那么麻烦了。就像说您已将 ImageField 定义为(例如:在 MySQL 中)

image = ImageField(upload_to='/pics', null=True, blank=True)

在数据库中它只是一个 VARCHAR 字段

'image' varchar(100) DEFAULT NULL,

这种方法在我们的 2 个项目中对我们有用,我再说一遍,如果你正在创建一个新数据库,你可以试试这个,如果在现有数据库上工作可能会很麻烦。

【讨论】:

    【解决方案2】:

    就我而言;我已经解决了一个一个迁移应用程序的问题。同样在我的一个应用程序中,我必须在第一次迁移时注释掉中心模型(对其他模型有很多外键的模型),然后重新激活它以进行该应用程序的第二次迁移。

    我不确定这是否适用于任何情况,但从技术上讲应该可以。希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-02
      • 2020-06-03
      • 2015-06-03
      • 2015-07-10
      • 2021-07-07
      • 2015-11-06
      • 2020-06-16
      • 2017-06-07
      相关资源
      最近更新 更多