Django update_或_不更新而是插入

2024-05-20 18:44:19 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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)
.\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


Tags: csvtesttruedatemodelbitesbytesmodels
1条回答
网友
1楼 · 发布于 2024-05-20 18:44:19

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

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

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 }) 

相关问题 更多 >