使用get或create导入数据 - 身份错误1062

时间:2013-06-27 16:11:57

标签: django

我将数据从mssql数据库导入mysql。除了遇到前一个条目的id时工作。 id是唯一的。我需要获得已经存在的条目,以便将它们放在当天的工作中。 错误是
IntegrityError:(1062,“密钥2的重复条目'001355338”) 此条目已在数据库中。我需要它输入当天,但不能将它添加到表中。它已经存在。

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,
          )

1 个答案:

答案 0 :(得分:2)

由于get_or_create是一系列AND的搜索,我猜你可能有一个患者(或一个患者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