gpt4 book ai didi

python - Django/MySql 不尊重 unique_together

转载 作者:行者123 更新时间:2023-11-28 21:30:03 27 4
gpt4 key购买 nike

我正在将 django 与 mysql (InnoDB) 一起使用,并且我的 django 模型中有以下内容:

class RowLock(models.Model):
table_name = models.CharField(blank = False, max_length = 30)
locked_row_id = models.IntegerField(null = False)
process_id = models.IntegerField(null = True)
thread_id = models.IntegerField(null = True)
class Meta:
db_table = "row_locks"
unique_together = (("table_name", "locked_row_id"),)

运行 python manage.py sql app_name 给出:

但是在 mysql 客户端中执行 desc row_locks 会给出:

mysql> desc row_locks;
+---------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| table_name | varchar(30) | NO | | NULL | |
| locked_row_id | int(11) | NO | | NULL | |
| process_id | int(11) | YES | | NULL | |
| thread_id | int(11) | YES | | NULL | |
+---------------+-------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)

还检查了我是否可以输入具有相同 table_name 和locked_row_id 值的重复行,而不会出现完整性错误。

现在我的假设是我在这里做错了什么,因为如此明显的事情不可能作为错误存在于野外,但我看不到它,

任何新的眼光将不胜感激

更新:因此,正如多米尼克指出的那样,问题在于向南的移民并没有造成独特的限制。我本可以考虑进行两次迁移,一次用于创建表,然后后续一次用于添加 unique_together - 不知道这是否有效 - 可能会尝试更多时间。

无论如何,我通过手动编辑南迁移脚本中的forward方法来解决这个问题,如下所示:

由南生成:

class Migration(SchemaMigration):

def forwards(self, orm):

# Adding model 'RowLock'
db.create_table('row_locks', (
('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('table_name', self.gf('django.db.models.fields.CharField')(max_length=30)),
('locked_row_id', self.gf('django.db.models.fields.IntegerField')()),
('process_id', self.gf('django.db.models.fields.IntegerField')(null=True)),
('thread_id', self.gf('django.db.models.fields.IntegerField')(null=True)),
))
db.send_create_signal('manager', ['RowLock'])

手动编辑:

class Migration(SchemaMigration):

def forwards(self, orm):

# Adding model 'RowLock'
db.create_table('row_locks', (
('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('table_name', self.gf('django.db.models.fields.CharField')(max_length=30)),
('locked_row_id', self.gf('django.db.models.fields.IntegerField')()),
('process_id', self.gf('django.db.models.fields.IntegerField')(null=True)),
('thread_id', self.gf('django.db.models.fields.IntegerField')(null=True)),
))
db.create_index('row_locks', ['table_name','locked_row_id'], unique=True)
db.send_create_signal('manager', ['RowLock'])

最佳答案

为了完整性,我的最后一次更新可能应该被添加为答案。

我通过手动编辑南迁的forward方法解决了这个问题,并添加了以下行:

db.create_index('row_locks', ['table_name','locked_row_id'], unique=True)

关于python - Django/MySql 不尊重 unique_together,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3916306/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com