Django错误 OperationalError: no such column: xxx
模型前后操作如下:
第一次迁移:
class Snippet(models.Model): created = models.DateTimeField(auto_now_add=True) title = models.CharField(max_length=100, blank=True, default='') code = models.TextField() linenos = models.BooleanField(default=True) language = models.CharField(choices=LANGUAGE_CHOICES, default='python', max_length=100) style = models.CharField(choices=STYLE_CHOICES, default='friendly', max_length=100)
更改后:
class Snippet(models.Model): created = models.DateTimeField(auto_now_add=True) title = models.CharField(max_length=100, blank=True, default='') code = models.TextField() linenos = models.BooleanField(default=True) language = models.CharField(choices=LANGUAGE_CHOICES, default='python', max_length=100) style = models.CharField(choices=STYLE_CHOICES, default='friendly', max_length=100) owner = models.ForeignKey('auth.User', related_name='snippets', on_delete=models.CASCADE) highlighted = models.TextField()
Djnago修改数据库分以下三步:
1、对models.py进行更改(正常)
2、使用makemigrations创建迁移
3、使用migrate执行迁移
分析:在该修改后模型后,第二次同步数据库时code和highlighted字段不能为空。如果第一次就创建highlighted字段,则无影响,因为该表没有现有的行。如果数据表第一次已经创建并且已经在表插入数据,则必须定义一个默认值来填充已有的行, 否则数据库会因为违反数据的完整性而不接受数据表更改。
解决方法:改为
code = models.TextField(default ='')
highlighted = models.TextField(default ='')