python - Django:插入或更新数据库条目
问题描述
我创建了以下函数,我可以在其中创建一个新的数据库条目,或者如果event_pk
已经存在则更新它。现在我调查了update_or_create
. 但是,这在我的情况下不起作用,因为其他条目(yhat 等)总是不同的。你有没有更好的想法来写它,这样我就不会像现在这样重复自己了?我的另一个想法是,我可以将event=event_obj, yhat=event_forecast.get('yhat')
等保存在 a 中dict
并打开包装。但没有弄清楚这是如何工作的。
def insert_forecast_data_to_db(self) -> None:
"""Insert or update forecast data in database."""
forecast_data = self.get_forecast_data()
for event_pk, event_forecast in forecast_data.items():
event_obj = Event.objects.get(pk=event)
forecast_obj = Forecast.objects.filter(event=event_pk)
if forecast_obj.exists():
forecast_obj.update(
event=event_obj,
yhat=event_forecast.get('yhat'),
yhat_lower=event_forecast.get('yhat_lower'),
yhat_upper=event_forecast.get('yhat_upper'),
img_key=event_forecast.get('img_key'),
)
else:
Forecast.objects.create(
event=event_obj,
yhat=event_forecast.get('yhat'),
yhat_lower=event_forecast.get('yhat_lower'),
yhat_upper=event_forecast.get('yhat_upper'),
img_key=event_forecast.get('img_key'),
)
解决方案
我想我刚刚想通了。这就是我的目标:
def insert_forecast_data_to_db(self) -> None:
"""Insert or update forecast data in database."""
forecast_data = self.get_forecast_data()
for event_pk, event_forecast in forecast_data.items():
event_obj = Event.objects.get(pk=event_pk)
data = {
'event': event_obj,
'yhat': event_forecast.get('yhat'),
'yhat_lower': event_forecast.get('yhat_lower'),
'yhat_upper': event_forecast.get('yhat_upper'),
'img_key': event_forecast.get('img_key'),
}
forecast_obj = Forecast.objects.filter(event=event_pk)
forecast_obj.update(
**data
) if forecast_obj.exists() else Forecast.objects.create(**data)
推荐阅读
- python - 将整个 H5 文件复制到新文件
- javascript - Intersection Observer 不会在快速滚动时触发
- r - 列联表没有在 r 中使用 pickerInput 返回正确的结果
- python - 如何将python的结果导出到txt文件
- vba - Outlook 对话对象不公开共享邮箱的根项目
- android - 这就是我运行“flutter run”时发生的情况
- html - 列弹性重叠后的 IE 11 元素
- reactjs - 提高axios获取下载速度
- javascript - 如何使用 lat longs 从 google maps API 获取楼层号或套房
- python - “ModelFormMetaclass”类型的参数不可迭代