3

我正在将数据从 mssql 数据库导入 mysql。除非遇到前一个条目的 id,否则有效。id 是唯一的。我需要获取已经存在的条目,以便将它们放入当天的工作中。错误是
IntegrityError: (1062, "Duplicate entry '001355338' for key 2") 此条目已在数据库中。我需要在那天输入它,但不能将它添加到表中。它已经在那里了。

def handle(self, *args, **options):
      #patients_local = Patient.objects.all()
      #attendings_local = Attending.objects.all()
      connection = pyodbc.connect("XXXXXXXXXXX") 
      cursor = connection.cursor()
      cursor.execute(COMMAND)
      rows = cursor.fetchall()
      for row in rows:
          # get_or_create returns (object, boolean)
          p, created = Patient.objects.get_or_create(
              first_name = row.Firstname,
              middle_name = '',
              last_name = row.Lastname,
              id = row.id,
          )
4

1 回答 1

2

由于get_or_create是使用一系列AND's 进行搜索,我猜您可能有一个患者(或一个患者 ID)具有不同的第一个/中间/最后一个组合。如果没有找到,那很好:get_or_create创建一个新的并继续前进,但是当有重复的 ID 时,它会混淆并引发异常。

因此,您的表格可能如下所示:

Firstname | Lastname | Middlename | id
---------------------------------------------
Frank     | Stein    |            | 1
Franklin  | Stein    |            | 1

解决这个问题的方法是使用defaults参数:

Patients.objects.get_or_create(id = row.id,
              defaults={'first_name': row.Firstname, 
                        'last_name': row.Lastname, 
                        'middle_name': ''})

您还应该确认 MySQL 中没有唯一的 Firstname、Lastname 索引。

Firstname | Lastname | Middlename | id
---------------------------------------------
John      | Smith    |            | 1         # John Smith from Jamestown, VA.
John      | Smith    |            | 754567890 # John Smith from StackOverflow
于 2013-06-27T16:18:41.770 回答