代码之家  ›  专栏  ›  技术社区  ›  Tomasz Zieliński

IntegrityError:(1062,“键'some\ instance\ A\ id''的重复条目'1830327-1792993'),但没有唯一约束

  •  1
  • Tomasz Zieliński  · 技术社区  · 15 年前

    很少地

     some_instance_A.my_m2m.add(some_instance_B)). 
    

    它可以工作99/100次。我觉得奇怪的是那个破折号,因为主键是整数。。

     my_m2m = ManyToManyField(B)
    

    完全回溯(为保护隐私进行少量编辑:):

    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'")
    
    1 回复  |  直到 15 年前
        1
  •  0
  •   hcalves    15 年前

    你能发布产生这个结果的代码片段吗?

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