python - Django - 限制 unique_together 列的键大小
问题描述
使用 MySQL,我试图拥有一个包含多个字段的复合键的表。
问题是某些字段很大(255 - 1024 长度),如果我尝试运行迁移,我会得到:
django.db.utils.OperationalError: (1071, 'Specified key was too long; max key length is 767 bytes')
我发现我可以限制在迁移文件中用作键的字段的值,而不是增加数据库的密钥长度(或更改其他一些数据库/表设置),使其保持在最大密钥长度内,例如这个:
ALTER TABLE <table> ADD UNIQUE KEY `<table>_composite_key` (`col1`, `col2`(75), `col3`, `col4`, `col5`(150));
但是,如果我要更改数据库引擎,这是一个问题,因为该语法可能与其他语法不兼容。
所以我想知道有没有办法对 unique_together 中的每个字段施加限制?
提前致谢!
解决方案
现在 Django 不支持约束,但在不久的将来会这样做。现在您可以添加 TODO 以在 Django 2.2 发布时对其进行更新。现在用于约束的 API 并不多。
请参阅:https ://docs.djangoproject.com/en/2.2/ref/models/constraints/
它不能回答您的问题,但它可以帮助您解决这个问题。
推荐阅读
- mainframe - 使用 IEBCOPY 将成员复制到带有通配符的数据集
- java - Netbeans 无法在 MacOS Big Sur 上打开。找不到 java 路径或找不到 jdk
- mysql - 如何使用 MYSQL GROUP BY 只选择一次重复行的查询计数?
- reactjs - 检测其他反应实例 url 变化
- python - 几秒钟后 Pygame 窗口没有响应
- sqlite - 单个标签可以显示 2 个数据字段,由用户交替选择
- python - 如何以较小的增量更改 Tkinter 小部件的宽度(Python)?
- javascript - 如何使用角度使图标动态激活
- visual-studio-2019 - 语法突出显示在 Blazor Server 项目中停止工作
- flutter - Flutter Riverpod 设计模式(禁止垃圾回收)