MCPcopy
hub / github.com/tortoise/tortoise-orm / _create_or_get

Method _create_or_get

tortoise/models.py:1295–1311  ·  view source on GitHub ↗

Try to create, if fails with IntegrityError then try to get

(
        cls, db: BaseDBAsyncClient, defaults: dict, **kwargs
    )

Source from the content-addressed store, hash-verified

1293
1294 @classmethod
1295 async def _create_or_get(
1296 cls, db: BaseDBAsyncClient, defaults: dict, **kwargs
1297 ) -> tuple[Self, bool]:
1298 """Try to create, if fails with IntegrityError then try to get"""
1299 for key in defaults.keys() & kwargs.keys():
1300 if (default_value := defaults[key]) != (query_value := kwargs[key]):
1301 raise ParamsError(f"Conflict value with {key=}: {default_value=} vs {query_value=}")
1302 merged_defaults = {**kwargs, **defaults}
1303 try:
1304 async with in_transaction(connection_name=db.connection_name) as connection:
1305 return await cls.create(using_db=connection, **merged_defaults), True
1306 except IntegrityError as exc:
1307 try:
1308 return await cls.filter(**kwargs).using_db(db).get(), False
1309 except DoesNotExist:
1310 pass
1311 raise exc
1312
1313 @classmethod
1314 def _db_queryset(

Callers 2

get_or_createMethod · 0.80
update_or_createMethod · 0.80

Calls 7

ParamsErrorClass · 0.90
in_transactionFunction · 0.90
keysMethod · 0.80
using_dbMethod · 0.80
createMethod · 0.45
getMethod · 0.45
filterMethod · 0.45

Tested by

no test coverage detected