2

我的 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")

我必须做什么?

4

2 回答 2

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'])]

运行良好makemigrationsmigrate成功创建索引。

于 2021-05-16T11:06:34.983 回答
-1

解决方案非常简单,只需按照他们的步骤操作即可。

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"

或者

借助一个简单的 SQL-lite 查询添加索引示例来完成

更改表测试添加索引 index_name(col1(255),col2(255));

添加唯一索引示例

更改表测试添加唯一索引名称(col1(255),col2(255));

于 2019-11-10T07:10:40.960 回答