【问题标题】:IntegrityError: (1062, "Duplicate entry '1830327-1792993' for key 'some_instance_A_id'") but no UNIQUE constraintIntegrityError: (1062, "Duplicate entry '1830327-1792993' for key 'some_instance_A_id'") 但没有唯一约束
【发布时间】:2011-03-06 00:37:27
【问题描述】:

很少在将模型实例添加到 many2many 字段时遇到这样的异常,即:

 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'")

【问题讨论】:

  • 我遇到了同样的(非常烦人的)问题,但我还没有找到解决方案:stackoverflow.com/questions/19303866/…。你有运气吗?
  • @rsp 我切换到 Postgresql 并开始享受生活:)

标签: django orm django-models


【解决方案1】:

你能发布产生这个结果的代码 sn-p 吗?

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

【讨论】:

  • 没有什么要发布的,只有这一行被我认为不相关的代码包围。但是如果没有人知道这里发生了什么,那么可能不相关的代码并不是那么不相关:) 但是,这是低优先级问题,所以我不会很快修复它。
  • 关于您的评论 - 违规行实际上是 transaction.commit() 之后的下一行,因此在事务中保存两次绝对不是问题
猜你喜欢
  • 2016-07-05
  • 1970-01-01
  • 2021-01-22
  • 1970-01-01
  • 1970-01-01
  • 2018-12-01
  • 2011-04-18
  • 2021-10-07
  • 2019-10-11
相关资源
最近更新 更多