首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Django update_or_create不更新而是插入

Django update_or_create不更新而是插入
EN

Stack Overflow用户
提问于 2020-07-24 21:54:47
回答 1查看 852关注 0票数 1

在使用update_or_create()时,我无法更新django模型中的行。它将创建一个新行,但不会更新它。在命令行中运行此代码后,我没有得到任何错误。我确信我做错了什么,但我不知道是什么。

代码语言:javascript
运行
复制
model.py

class Test(models.Model):
    id = models.AutoField(primary_key=True)
    date = models.CharField(blank=True, max_length=100, unique=True)
    bites = models.CharField(blank=True, max_length=100)
    imgs = models.CharField(blank=True, max_length=100)
代码语言:javascript
运行
复制
.\manage.py shell
from status.models import Test
import pandas as pd

d1 = pd.read_csv('data1.csv')
2020-02-10  2355975072768 939

d2 = pd.read_csv('data2.csv')
2020-02-10  2355975072768 938

for model in d1.itertuples():
    model, created = Test.objects.update_or_create(date=model.date, bites=model.total_bytes, imgs=model.total_files, defaults={'date': model.date, 'bites':model.total_bytes, 'imgs':model.total_files })

database_sqlite3 output: 
1|2020-02-10|2355975072768|939

for model in d2.itertuples():
    model, created = Test.objects.update_or_create(date=model.date, bites=model.total_bytes, imgs=model.total_files, defaults={'date': model.date, 'bites':model.total_bytes, 'imgs':model.total_files })

database_sqlite3 output: 
1|2020-02-10|2355975072768|939
2|2020-02-10|2355975072768|938
EN

回答 1

Stack Overflow用户

发布于 2020-07-24 22:09:36

它不应该更新,因为update_or_create首先尝试用提供的参数获取和更新一个对象,如果找不到什么,它会创建一个新对象。它正在创建一个新对象,因为它在您的数据库中找不到带有参数imgs=938的对象。

您可以省略imgs参数,以允许函数查找具有所提供的datebites参数的对象:

代码语言:javascript
运行
复制
model, created = Test.objects.update_or_create(date=model.date, bites=model.total_bytes, defaults={'date': model.date, 'bites':model.total_bytes, 'imgs':model.total_files }) 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63075051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档