MCPcopy Index your code
hub / github.com/tortoise/tortoise-orm / _init_from_db

Method _init_from_db

tortoise/models.py:813–856  ·  view source on GitHub ↗
(cls: type[MODEL], **kwargs: Any)

Source from the content-addressed store, hash-verified

811
812 @classmethod
813 def _init_from_db(cls: type[MODEL], **kwargs: Any) -> MODEL:
814 self = cls.__new__(cls)
815 self._partial = False
816 self._saved_in_db = True
817 self._custom_generated_pk = self._meta.db_pk_column not in self._meta.generated_db_fields
818 self._await_when_save = {}
819
820 meta = self._meta
821 _setattr = object.__setattr__ # bypass __setattr__ override for performance
822 try:
823 # This is like so for performance reasons.
824 # We want to avoid conditionals and calling .to_python_value()
825 # Native fields are fields that are already converted to/from python to DB type
826 # by the DB driver
827 for key, model_field, field in meta.db_native_fields:
828 _setattr(self, model_field, kwargs[key])
829 # Fields that don't override .to_python_value() are converted without a call
830 # as we already know what we will be doing.
831 for key, model_field, field in meta.db_default_fields:
832 if (value := kwargs[key]) is not None:
833 value = field.field_type(value)
834 _setattr(self, model_field, value)
835 # These fields need manual .to_python_value()
836 for key, model_field, field in meta.db_complex_fields:
837 _setattr(self, model_field, field.to_python_value(kwargs[key]))
838 except KeyError:
839 # Partial model (.only() query) — slower but correct fallback
840 self._partial = True
841 native_keys = {k for k, _, _ in meta.db_native_fields}
842 default_keys = {k for k, _, _ in meta.db_default_fields}
843 for key, value in kwargs.items():
844 if key not in meta.fields_map:
845 continue
846 field = meta.fields_map[key]
847 if key not in native_keys:
848 if key in default_keys:
849 if value is not None:
850 value = field.field_type(value)
851 else:
852 value = field.to_python_value(value)
853 model_field = meta.fields_db_projection_reverse.get(key, key)
854 _setattr(self, model_field, value)
855
856 return self
857
858 def __str__(self) -> str:
859 return f"<{self.__class__.__name__}>"

Callers 2

execute_selectMethod · 0.80

Calls 4

itemsMethod · 0.80
__new__Method · 0.45
to_python_valueMethod · 0.45
getMethod · 0.45

Tested by

no test coverage detected