我将数据从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,
)
答案 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