【发布时间】:2014-09-10 15:56:21
【问题描述】:
我试图在一个循环中保存多个对象。
for i in range(0,12):
some_url = "blabla.com/signnum=" + str(i)
req = urllib2.Request(astro_url,headers=hdr)
str_response = urllib2.urlopen(req)
json_str = json.load(str_response)
with transaction.atomic():
if i == 0:
capricorn, cp_created = Capricorn.objects.get_or_create(astro_date=json_str['daily']['data_date'],
defaults={
'headline': json_str['daily']['headline'],
'headcontent':json_str['daily']['content'],
'rating':json_str['daily']['rating'],
'love_rate':json_str['daily']['love'],
})
if cp_created:
print 'Capricorn saved'
else:
print 'Capricorn is already in db'
if i == 1:
#different model
if i == 2:
#different model
....
....
这种情况一直持续到 12 日。相同的字段只有不同的型号名称。
我遇到的问题是最后的第 12 个对象没有被插入到数据库中,尽管
if last_created:
print last_createdobj.id
print 'LastModelObject saved'
else:
print 'LastModelObject is already in db'
正在打印1 和LastModelObject saved。正在插入所有其他对象。
这里发生了什么?循环实际上循环了 12 次。写入数据库是原子的。这里有什么不好的?我真的卡住了。。
我正在使用 sqlite (dev),它正在打印 db 中不存在的 id 1,这是什么鬼?
【问题讨论】:
-
假设检查
if i==0:背后的逻辑是正确的,该函数是打印Capricorn saved还是already in db?你是如何计算last_created对象的? -
@karthikr 是的,摩羯座只是第一个成功保存的模型,第 12 个模型
i==11没有被保存,尽管它说lastmodelobject is saved。 -
那你为什么有
if i == 0:呢?摆脱它。由于该检查,所有这些代码都不会在循环中的第一次迭代之后执行。 -
@karthikr
last_created也与这里给定的摩羯座相同。只是型号名称不同。我只是没有发布那么多代码 -
没有代码,可能很难推测,但看起来你在做不必要的繁重工作。这是一个更简单的模型。 gist.github.com/karthikbgl/…这样,你可以轻松调试,代码在一个地方。