0

我正在发出一个返回序列化数据的请求。我并遍历数据并检查它是否存在于数据库中。如果存在则忽略,如果不存在则保存。我遇到的问题是 for 循环只保存第一条记录,即使它遍历数据的所有键并将其与数据库中的内容进行比较。我的代码如下:

b = MyModel()
data #The serialized data
existingData = Off.object.filter(...)

for key in data:
    if existingData.filter(id_str=key['id_str']).exists():
        pass #If I place a print key['id_str'] here, all skipped items are printed.
    else:
        b.x = key['x']
        b.y = key['y']
        b.save()

每次函数运行时,计数器都会在b.save()计数器增加后放置在 else 语句的底部,但只有通过检查的第一条记录被保存,数据中的其余项目不保存。我哪里错了?

4

1 回答 1

2

首先,您可能会覆盖同一个 b对象,而不是创建一个新对象;我的意思是你检查带有 some 的对象id_str不存在,但你只是覆盖b'sxy属性。也许你需要做的是:

for item in data:
    if not existingData.filter(id_str=item.get('id_str')).exists():
        MyModel.objects.create(id_str=item.get('id_str'),
                               x=item.get('x'),
                               y=item.get('y'))

希望这可以帮助 :)

干杯!

于 2012-12-11T16:44:26.120 回答