我的Django项目中有以下模型:
class Institution(models.Model):
name = models.CharField(unique=True, max_length=100, blank=True)
description = models.TextField(max_length=500, null=True, blank=True)
def __str__(self):
return self.name
当我使用SQLite
时,我完全运行了项目,但是当我将数据库引擎更改为Mysql
时,出现此错误:
MySQLdb._exceptions.OperationalError: (1170, "BLOB/TEXT column 'name' used in key specification without a key length")
我该怎么办?
答案 0 :(得分:0)
解决方案非常简单,只需按照他们的步骤操作即可。
1 - Dell all the files in the migration folder
2 - Then run the command "python manage.py makemigrations"
3 - Then run the command "python manage.py migrate"
OR
借助简单的SQL-lite查询来执行此操作 添加索引示例
变更表测试添加索引index_name(col1(255),col2(255));
添加唯一索引示例
更改表测试添加唯一的index_name(col1(255),col2(255));
答案 1 :(得分:0)
我收到此错误是因为我试图为 TextField
创建索引。我没有注意到我在 TextField
字段中使用了 name
,我应该使用 CharField
。
class myModel(models):
name = models.TextField(max_length=80)
class Meta:
indexes = [ models.Index(fields=['name'])]
这是我的解决方案。
首先,我删除了第一次在模型中添加索引时创建的迁移文件并运行 python manage.py makemigrations
其次,我从模型中删除了索引。
class myModel(models):
name = models.TextField(max_length=80)
第三,我运行 python manage.py makemigrations
。它显示“未检测到任何变化”。
第四,我运行 python manage.py migrate
并没有再次出现错误。
为了成功创建索引,我必须将 TextField
字段更改为 CharField
并再次添加索引。
class myModel(models):
name = models.CharField(max_length=80)
class Meta:
indexes = [ models.Index(fields=['name'])]
运行 makemigrations
和 migrate
顺利并成功创建索引。