72 lines
1.9 KiB
Markdown
72 lines
1.9 KiB
Markdown
# Update
|
|
|
|
* `update(each: bool = False, **kwargs) -> int`
|
|
* `update_or_create(**kwargs) -> Model`
|
|
* `bulk_update(objects: List[Model], columns: List[str] = None) -> None`
|
|
* `Model.update() method`
|
|
* `Model.upsert() method`
|
|
* `Model.save_related() method`
|
|
|
|
## update
|
|
|
|
`update(each: bool = False, **kwargs) -> int`
|
|
|
|
QuerySet level update is used to update multiple records with the same value at once.
|
|
|
|
You either have to filter the QuerySet first or provide a `each=True` flag to update
|
|
whole table.
|
|
|
|
If you do not provide this flag or a filter a `QueryDefinitionError` will be raised.
|
|
|
|
Return number of rows updated.
|
|
|
|
```Python hl_lines="26-28"
|
|
--8<-- "../docs_src/queries/docs002.py"
|
|
```
|
|
|
|
!!!warning Queryset needs to be filtered before updating to prevent accidental
|
|
overwrite.
|
|
|
|
To update whole database table `each=True` needs to be provided as a safety switch
|
|
|
|
## update_or_create
|
|
|
|
`update_or_create(**kwargs) -> Model`
|
|
|
|
Updates the model, or in case there is no match in database creates a new one.
|
|
|
|
```Python hl_lines="26-32"
|
|
--8<-- "../docs_src/queries/docs003.py"
|
|
```
|
|
|
|
!!!note Note that if you want to create a new object you either have to pass pk column
|
|
value or pk column has to be set as autoincrement
|
|
|
|
## bulk_update
|
|
|
|
`bulk_update(objects: List["Model"], columns: List[str] = None) -> None`
|
|
|
|
Allows to update multiple instance at once.
|
|
|
|
All `Models` passed need to have primary key column populated.
|
|
|
|
You can also select which fields to update by passing `columns` list as a list of string
|
|
names.
|
|
|
|
```python hl_lines="8"
|
|
# continuing the example from bulk_create
|
|
# update objects
|
|
for todo in todoes:
|
|
todo.completed = False
|
|
|
|
# perform update of all objects at once
|
|
# objects need to have pk column set, otherwise exception is raised
|
|
await ToDo.objects.bulk_update(todoes)
|
|
|
|
completed = await ToDo.objects.filter(completed=False).all()
|
|
assert len(completed) == 3
|
|
```
|
|
|
|
## Model method
|
|
|