Insert data into database
Following methods allow you to insert data into the database.
create(**kwargs) -> Model
get_or_create(_defaults: Optional[Dict[str, Any]] = None, **kwargs) -> Tuple[Model, bool]
update_or_create(**kwargs) -> Model
-
bulk_create(objects: List[Model]) -> None
-
Model
Model.save()
methodModel.upsert()
methodModel.save_related()
method
-
QuerysetProxy
QuerysetProxy.create(**kwargs)
methodQuerysetProxy.get_or_create(_defaults: Optional[Dict[str, Any]] = None, **kwargs)
methodQuerysetProxy.update_or_create(**kwargs)
method
create
create(**kwargs): -> Model
Creates the model instance, saves it in a database and returns the updates model (with pk populated if not passed and autoincrement is set).
The allowed kwargs are Model
fields names and proper value types.
1 2 3 4 5 6 7 8 9 10 |
|
1 2 |
|
The alternative is a split creation and persistence of the Model
.
1 2 |
|
Tip
Check other Model
methods in models
get_or_create
get_or_create(_defaults: Optional[Dict[str, Any]] = None, **kwargs) -> Tuple[Model, bool]
Combination of create and get methods.
Tries to get a row meeting the criteria and if NoMatch
exception is raised it creates
a new one with given kwargs and _defaults.
When _defaults
dictionary is provided the values set in _defaults
will always be set, including overwriting explicitly provided values.
i.e. get_or_create(_defaults: {"title": "I win"}, title="never used")
will always use "I win" as title whether you provide your own value in kwargs or not.
1 2 3 4 5 6 7 8 9 10 |
|
1 2 3 4 5 6 7 8 9 |
|
Warning
Despite being a equivalent row from database the album
and album2
in
example above are 2 different python objects!
Updating one of them will not refresh the second one until you explicitly load() the
fresh data from db.
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
update_or_create
update_or_create(**kwargs) -> Model
Updates the model, or in case there is no match in database creates a new one.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
|
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_create
bulk_create(objects: List["Model"]) -> None
Allows you to create multiple objects at once.
A valid list of Model
objects needs to be passed.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
|
Model methods
Each model instance have a set of methods to save
, update
or load
itself.
save
You can create new models by using QuerySet.create()
method or by initializing your model as a normal pydantic model
and later calling save()
method.
Tip
Read more about save()
method in models-save
upsert
It's a proxy to either save()
or update(**kwargs)
methods of a Model.
If the pk is not set the save()
method will be called.
Tip
Read more about upsert()
method in models-upsert
save_related
Method goes through all relations of the Model
on which the method is called,
and calls upsert()
method on each model that is not saved.
Tip
Read more about save_related()
method in models-save-related
QuerysetProxy methods
When access directly the related ManyToMany
field as well as ReverseForeignKey
returns the list of related models.
But at the same time it exposes subset of QuerySet API, so you can filter, create, select related etc related models directly from parent model.
create
Works exactly the same as create function above but allows you to create related objects from other side of the relation.
Tip
To read more about QuerysetProxy
visit querysetproxy section
get_or_create
Works exactly the same as get_or_create function above but allows you to query or create related objects from other side of the relation.
Tip
To read more about QuerysetProxy
visit querysetproxy section
update_or_create
Works exactly the same as update_or_create function above but allows you to update or create related objects from other side of the relation.
Tip
To read more about QuerysetProxy
visit querysetproxy section