Django / python相对较新。我有一个API调用请求,并从中获得JSON数据:
['node':'node01',' cpu':0.0193098516002146,'mem':92328939520,'状态':'online'},' node ':'node02',' cpu':0.0100098516002146,'mem':72823919520,'状态':'online'},' node ':'node03',' cpu':0.0023498516002146,'mem':92328939520,'状态':'online'}]
如果我把i变得更容易理解:
['node':'node01',' cpu':0.0193098516002146,'mem':92328939520,'状态':'online'},' node ':'node02',' cpu':0.0100098516002146,'mem':72823919520,'状态':'online'},' node ':'node03',' cpu':0.0023498516002146,'mem':92328939520,'状态':'online'}]
我有以下模型:
class Node(models.Model):
node = models.CharField(max_length=2000, null=True, blank=True)
cpu = models.FloatField(null=True, blank=True)
mem = models.FloatField(null=True, blank=True)
status = models.CharField(max_length=2000, null=True, blank=True)
现在我想将API数据保存到模型中,因此在本例中,DB中有3个“记录”。
我尝试了以下方法:
for node in r:
a = Node(
cpu=node['cpu'],
mem=node['mem'],
node=node['node'],
status=node['status'],
)
a.save()
r是API调用数据。但这只保存最后一个API数据(node 03)。当我再次调用API时,记录必须更新(以反映mem更改等)
3条答案
按热度按时间mftmpeh81#
最好使用
bulk_create
而不是loop
。试试这个:5kgi1eie2#
试试下面的东西--
型号
观点
tzdcorbm3#
我认为这里的问题不是它在DB中创建了3条记录。因为您共享的代码将在数据库中创建三个条目,但变量
a
只会跟踪它创建的最后一个示例。但如果您这样检查:它应该打印它创建的所有示例。
除此之外,@HemalPatel建议的是正确的apraoch。您应该使用
bulk_create
。此外,bulk_create有用于更新假定更新的示例的选项(如this answer中所解释的)。尽管如此,我还是建议你跟踪特定节点的所有更改,并且你总是可以获得最新的更改。例如使用Window函数: