我使用的是Django 3.0和Python 3.6。我有一个型号:
class Data(models.Model):
parameter = models.CharField(
max_length=16,
blank=True,
null=True
)
mode = models.CharField(
max_length=8,
blank=True,
null=True
)
value = models.PositiveSmallIntegerField(
blank=True,
null=True
)
一切都很好。然后,我在模型中添加了一个字段:
class Data(models.Model):
parameter = models.CharField(
max_length=16,
blank=True,
null=True
)
mode = models.CharField(
max_length=8,
blank=True,
null=True
)
value = models.PositiveSmallIntegerField(
blank=True,
null=True
)
code = models.CharField(
max_length=64,
blank=True,
null=True
)
在没有做任何其他事情的情况下,我尝试运行迁移。它导致了这个错误:
$ python3 manage.py makemigrations
...
django.db.utils.OperationalError: (1054, "Unknown column 'appName_data.code' in 'field list'")
是的,不,这是一个未知的列,这就是为什么我想让你把它添加到表中。
我已经尝试过搜索这个错误,但我能找到的只是2008年之前Stack Overflow上的内容,我无法将其应用于我的情况,以及一些我甚至无法开始阅读的晦涩的旧错误报告。
我该怎么办?
编辑:
我手动添加了列:
mysql> ALTER TABLE appName_data ADD code VARCHAR(64) NULL;
之后,makemigrations
将成功运行,但当我尝试执行迁移时,我会得到错误
django.db.utils.OperationalError: (1060, "Duplicate column name 'code'")
当时,models.py
仍然定义了code
列。我删除了该字段并重试,但无论哪种方式,migrate
步骤都返回相同的错误。
不知道如何继续。
您能分享您的迁移吗?
看起来你的数据库因为某种原因失去了同步
一种快速而肮脏的方法是手动将列添加到数据库中,如下所示:(现在还不要这样做,让我先看看您的迁移!(
python manage.py dbshell
检查表并选择目标表,在本例中为appName_data
sqlite> .tables
然后将代码列添加到数据库
像这样:
ALTER TABLE table_name
ADD new_column_name column_definition;
在您的情况下:
sqlite>ALTER TABLE appName_data
...>ADD core VARCHAR(64) NULL ;