【发布时间】:2020-04-06 05:13:18
【问题描述】:
我有一个在调度程序上运行的脚本,用于从 api 获取数据,然后我打算使用这些数据来更新当前的数据库模型信息。
我的模型 ShowInfo 在 main/models.py 中:
from django.contrib.auth.models import User
class ShowInfo(models.Model):
title = models.CharField(max_length=50)
latest_ep_num = models.FloatField()
ld = models.BooleanField()
sd = models.BooleanField()
hd = models.BooleanField()
fhd = models.BooleanField()
following = models.ManyToManyField(User, related_name = 'following', blank=True)
我设法将问题隔离到脚本的这一部分,该部分运行但将具有相同标题的重复节目插入数据库:
else: #test if api fails
for t in real_title:
if t in data_title: #testing if the titles in the database and from the api match
a = ShowInfo.objects.get(title=t)
id = a.id
b = next(item for item in show_list if item["title"] == t)
a1 = ShowInfo(id = id, title = b["title"], latest_ep_num=b["latest_ep_num"], ld=b["ld"], sd=b["sd"],hd=b["hd"],fhd=b["fhd"])
a1.save()
关于列表的一些附加信息(其中 show_list 是从 api 获取的字典列表):
database = ShowInfo.objects.values()
real_title = []
data_title = []
for show in show_list:
real_title.append(show["title"])
for data in database:
data_title.append(data["title"])
当脚本运行时,我在使用 DB Browser for SQLite 浏览我的数据库时注意到,对象正在插入,而不是按我的预期更新。
脚本应该从 api 和数据库中捕获具有相同标题的节目并更新任何更改的信息。有人知道我的 save() 方法有什么问题吗?
【问题讨论】:
-
所以你正在尝试更新
a = ShowInfo.objects.get(title=t)检索到的对象对吧? -
a = ShowInfo.objects.get(title=t)正在尝试检索我要更新的对象。a1.save应该更新它 -
你的意思是
id是重复的? -
通过使用 DB Browser 查看我的数据库,ID 没有重复,但条目是重复的。这意味着正在插入具有相同标题的节目并且没有按照我的意愿进行更新
-
尝试打印
id。
标签: python django database api django-models