Python 保存for循环的每个迭代

Python 保存for循环的每个迭代,python,django,Python,Django,我正在发出一个返回序列化数据的请求。我检查并迭代数据,检查数据库中是否存在该数据。如果它存在,则忽略它;如果它不存在,则保存它。我遇到的问题是,for循环只保存第一条记录,即使它遍历数据的所有键并将其与数据库中的内容进行比较。我的代码如下: b = MyModel() data #The serialized data existingData = Off.object.filter(...) for key in data: if existingData.filter(id_str

我正在发出一个返回序列化数据的请求。我检查并迭代数据,检查数据库中是否存在该数据。如果它存在,则忽略它;如果它不存在,则保存它。我遇到的问题是,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()

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

首先,您可能会覆盖相同的对象,而不是创建一个新对象;我的意思是,您检查具有一些
id\u str
的对象是否不存在,但您只是覆盖
b
x
y
属性。也许你需要做的是:

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'))
希望这有帮助:)


干杯

你怎么知道问题不在MyModel.save中?有什么方法可以检查吗?当我第一次写这篇文章只是为了测试它的时候,我把数据拿了3次,把所有的键都保存了3次。现在我只保存1:-(接受一些其他答案,然后我们会帮助你。除非你不接受答案->没有帮助这次我没有忘记接受。:-D谢谢你的帮助。请注意,在循环中执行数据库操作通常不是一个好主意。除非你能绝对确定迭代次数会变慢,否则操作有机会失败o远离你,真的会让事情慢下来。考虑一下前进。这绝对是真的!+1:)