mirror of
https://github.com/Infinidat/infi.clickhouse_orm.git
synced 2025-07-23 14:29:47 +03:00
Performance improvement: build a _writable_fields list once instead of calculating it every time it's needed
This commit is contained in:
parent
c5a9b16eac
commit
dacf88adbf
|
@ -27,6 +27,7 @@ class ModelBase(type):
|
|||
fields = base_fields + [item for item in attrs.items() if isinstance(item[1], Field)]
|
||||
fields.sort(key=lambda item: item[1].creation_counter)
|
||||
setattr(new_cls, '_fields', fields)
|
||||
setattr(new_cls, '_writable_fields', [f for f in fields if not f[1].readonly])
|
||||
return new_cls
|
||||
|
||||
@classmethod
|
||||
|
@ -186,7 +187,7 @@ class Model(with_metaclass(ModelBase)):
|
|||
:param bool include_readonly: If False, returns only fields, that can be inserted into database
|
||||
'''
|
||||
data = self.__dict__
|
||||
fields = self._fields if include_readonly else [f for f in self._fields if not f[1].readonly]
|
||||
fields = self._fields if include_readonly else self._writable_fields
|
||||
return '\t'.join(field.to_db_string(data[name], quote=False) for name, field in fields)
|
||||
|
||||
def to_dict(self, include_readonly=True, field_names=None):
|
||||
|
@ -195,7 +196,7 @@ class Model(with_metaclass(ModelBase)):
|
|||
:param bool include_readonly: If False, returns only fields, that can be inserted into database
|
||||
:param field_names: An iterable of field names to return
|
||||
'''
|
||||
fields = self._fields if include_readonly else [f for f in self._fields if not f[1].readonly]
|
||||
fields = self._fields if include_readonly else self._writable_fields
|
||||
|
||||
if field_names is not None:
|
||||
fields = [f for f in fields if f[0] in field_names]
|
||||
|
|
Loading…
Reference in New Issue
Block a user