2010-06-20 81 views
1

很少得到这样的异常增加时,模型实例many2many领域,即:IntegrityError:(1062, “重复条目 '1830327-1792993' 关键 'some_instance_A_id'”),但没有UNIQUE约束

some_instance_A.my_m2m.add(some_instance_B)). 

它说99/100倍。看起来很怪,是破折号标志 - 作为主键是整数..

型号字段定义是这样的:

my_m2m = ManyToManyField(B) 

所以这是最简单的M2M定义可能

完全回溯(与小编辑保护隐私:)):

File "*******", line 278, in process_request 
    some_instance_A.my_m2m.add(some_instance_B) 
File "/var/lib/python-support/python2.5/django/db/models/fields/related.py", line 490, in add 
    self._add_items(self.source_field_name, self.target_field_name, *objs) 
File "/var/lib/python-support/python2.5/django/db/models/fields/related.py", line 574, in _add_items 
    '%s_id' % target_field_name: obj_id, 
File "/var/lib/python-support/python2.5/django/db/models/query.py", line 352, in create 
    obj.save(force_insert=True, using=self.db) 
File "/var/lib/python-support/python2.5/django/db/models/base.py", line 435, in save 
self.save_base(using=using, force_insert=force_insert, force_update=force_update) 
File "/var/lib/python-support/python2.5/django/db/models/base.py", line 528, in save_base 
result = manager._insert(values, return_id=update_pk, using=using) 
File "/var/lib/python-support/python2.5/django/db/models/manager.py", line 195, in _insert 
return insert_query(self.model, values, **kwargs) 
File "/var/lib/python-support/python2.5/django/db/models/query.py", line 1479, in insert_query 
return query.get_compiler(using=using).execute_sql(return_id) 
File "/var/lib/python-support/python2.5/django/db/models/sql/compiler.py", line 783, in execute_sql 
cursor = super(SQLInsertCompiler, self).execute_sql(None) 
File "/var/lib/python-support/python2.5/django/db/models/sql/compiler.py", line 727, in execute_sql 
cursor.execute(sql, params) 
File "/var/lib/python-support/python2.5/django/db/backends/mysql/base.py", line 86, in execute 
return self.cursor.execute(query, args) 
File "/var/lib/python-support/python2.5/MySQLdb/cursors.py", line 166, in execute 
self.errorhandler(self, exc, value) 
File "/var/lib/python-support/python2.5/MySQLdb/connections.py", line 35, in defaulterrorhandler 
raise errorclass, errorvalue 
IntegrityError: (1062, "Duplicate entry '1830327-1792993' for key 'some_instance_A_id'") 
+0

我有同样的(非常恼人的)问题,我还没有找到解决方案:http://stackoverflow.com/questions/19303866/cause-of-django-duplicate-entry-error-1062。你有没有运气? – rsp 2013-11-23 15:09:39

+0

@rsp我切换到Postgresql并开始享受生活:) – 2013-11-23 20:05:08

回答

0

你可以发布产生这种结果的代码片段吗?

至少在Postgres上,如果您尝试在事务中保存两次实例,就会发生这种情况。

+0

没有什么可发布的,这是我认为是无关代码包围的单行。但是,如果没有人知道这里发生了什么,那么可能这个无关的代码并不是无关的:)然而,它是低优先级的问题,所以我不会很快修复它。 – 2010-06-30 00:14:48

+0

关于你的评论 - 违规行实际上是'transaction.commit()'后面的下一行,因此在事务内保存两次肯定不是问题 – 2010-06-30 00:17:13

相关问题