【问题标题】:Django: Adding db_index to existing tableDjango:将 db_index 添加到现有表
【发布时间】:2017-05-20 16:25:27
【问题描述】:

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

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

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

我正在使用 MySQL。 Django 在这方面的最佳实践是什么?

【问题讨论】:

  • Django 在你进行 makemigrations 时当然应该为你创建一个迁移。
  • 它没有,另一篇文章的作者也经历过。

标签: django database


【解决方案1】:

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

python manage.py makemigrations --empty --name create_table_index 

并像链接中发布的示例一样对其进行编辑:

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
    ]    

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

【讨论】:

  • 感谢您的回答。我会试试的。我只是觉得奇怪的是 Django 的 makemigrations 根本不在乎。我认为在项目后期添加索引是很常见的情况。
  • 只是对这个发表评论...... django makemigrations 绝对支持事后添加索引。我也是这么想的,但事实证明我正在尝试向外键相关字段添加索引,而 django 会自动为这些字段建立索引,因此设置 db_index=True 并对这些字段运行 makemigrations 没有任何效果,因为它们已经被索引了。
猜你喜欢
  • 2016-04-17
  • 2015-08-28
  • 1970-01-01
  • 1970-01-01
  • 2013-01-25
  • 1970-01-01
  • 2016-11-13
  • 1970-01-01
相关资源
最近更新 更多