Django:将db_index添加到现有表

Dan*_*iel 2 database django

我有一个Django模型,我想db_index=True在创建表后添加一个字段.

我发现Django没有创建迁移,因此没有创建索引.如果该表不存在且首次创建,则Django会创建索引.

我读过Django:db_index和makemigrations,但我想知道手动创建迁移文件是否是个好主意?

我正在使用MySQL.Django最佳实践是什么?

2ps*_*2ps 8

是.它是完全可以接受的,并且(有时)甚至是最好的做法,为此使用手写迁移.甚至还有一个特殊的命令可以为这些类型的问题创建空白迁移.

python manage.py makemigrations --empty --name create_table_index 
Run Code Online (Sandbox Code Playgroud)

并按照链接中发布的示例进行编辑:

class Migration(migrations.Migration):

    dependencies = [
        ('your_app', '0001_initial'), # or last mig
    ]

    operations = [
        migrations.RunSQL("CREATE INDEX idx_column ON my_table (my_column)"),
        # this format should also work for mysql
    ]    
Run Code Online (Sandbox Code Playgroud)

对于对您的应用程序至关重要的表,某些操作团队更喜欢手动添加索引,以便您可以更好地控制创建索引对应用程序产生影响的时间.但这通常是团队偏好的问题

  • 只是gona评论这个... django makemigrations DEFINITELY支持在事后添加索引.我的想法是一样的,但事实证明我正在尝试向外键相关字段添加索引,并且django会自动为这些字段编制索引,因此设置db_index = True并对这些字段运行makemigrations无效,因为它们已被ALREADY索引. (7认同)
  • 感谢您的回答。我会试试的。我只是觉得奇怪的是 Django 的 `makemigrations` 根本不在乎。我认为在项目的后期添加索引是很常见的情况。 (2认同)