我在其中一个模型中添加了一个非空CharField
:
channel_class = models.CharField(max_length=10, blank=True)
我使用以下命令创建迁移:
django-admin.py makemigrations webapp
其中没有任何关于默认值的信息(请参阅this ticket有关提示blank=True
的默认值)。
为此迁移生成的SQL是:
$ django-admin.py sqlmigrate webapp 0003_auto_20150514_1112
BEGIN;
ALTER TABLE `webapp_lead` ADD COLUMN `channel_class` varchar(10) DEFAULT NOT NULL;
ALTER TABLE `webapp_lead` ALTER COLUMN `channel_class` DROP DEFAULT;
COMMIT;
但是,如果我将其插入到MySQL编辑器中,那么我会收到错误:
mysql> ALTER TABLE `webapp_lead` ADD COLUMN `channel_class` varchar(10) DEFAULT NOT NULL;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'NOT NULL' at line 1
如果我使用它可以工作:
mysql> ALTER TABLE `webapp_lead` ADD COLUMN `channel_class` varchar(10) DEFAULT '' NOT NULL;
即。如果我指定一个空字符串作为默认值。
我的猜测是this bug的修复程序引入了一个新错误?
答案 0 :(得分:2)
https://code.djangoproject.com/ticket/24803
这是django中的一个错误。
在django.db.backends.base.schema.BaseDatabaseSchemaEditor#execute
中,当收集的SQL存储self.collected_sql
时,空字符串以错误的方式传递给格式化字符串,因此导致SQL没有''
。