У меня есть функция, которая использует sqlalchemy для вставки данных и возвращает экземпляр, с удалением других подробностей
#in models
class Example(Base):
__tablename__ = 'exmaple'
id = Column(Integer, primary_key=True)
attr_a= Column(String(25))
attr_b = Column(String(20))
#in a file called core
def insert(session, Model, data):
try:
new_entity = Model(**data)
session.add(new_entity)
session.commit()
session.flush()
except DataError as err:
print(err)
return new_entity
def create_entity(entity_key, data):
session = Session(engine)
created_entity = core.insert(session, utils.entity_map[entity_key], data)
print('before getattr',created_entity.__dict__) # the dict only yields the instance_state object i.e. not the actual data fields such as attr_a, attr_b...
print(getattr(created_entity, 'id')) # id used for this example
print('after getattr',created_entity.__dict__) # yields all attributes attr_a, attr_b
session.close()
Предположим, что create_entity вызывается с данными для Пример Модель и пример вставлен. Когда я пытаюсь получить доступ к атрибуту __dict__
экземпляра, он ведет себя по-разному в зависимости от того, вызвал ли я getattr
.
- Может кто-нибудь объяснить это поведение?
- Есть ли способ последовательно получить
__dict__
, который возвращает полный набор атрибутов данных - В отношении q2 можно положиться на это странное поведение, то есть просто позвонить
getattr
перед тем доступ к dict?
Примечание. Причина, по которой мне нужен доступ к атрибутам данных после вставки / принятия, заключается в том, что мне нужно возвращать автоматически сгенерированные поля, такие как id, last_updated timestamp ...