【发布时间】:2017-04-30 17:02:54
【问题描述】:
假设我有一个User 模型,其属性为id、name、email 和一个关系languages。
是否可以从现有数据创建一个User 实例,其行为就像我用dbsession.query(User).get(42) 查询它一样?
我的意思是我希望对user.languages 的访问创建一个子查询并填充属性。
这里是一个代码示例:
我有一堂课User:
class User(Base):
id = Column(Integer, primary_key=True)
name = Column(String(64))
email = Column(String(64))
languages = relationship('Language', secondary='user_languages')
我的数据库中已经存储了很多用户。 而且我知道我的数据库中有这个用户:
user_dict = {
'id': 23,
'name': 'foo',
'email': 'foo@bar',
}
所以我拥有除了关系之外的所有属性。
现在我想做一个 sqlalchemy User 实例
并在 sqlalchemy 的系统中注册它
所以如果需要我可以得到languages。
user = User(**user_dict)
# Now I can access the id, name email attributes
assert user.id == 23
# but since sqlalchemy thinks it's a new model it doesn't
# lazy load any relationships
assert len(user.languages) == 0
# I want here that the languages for the user with id 23 appear
# So I want that `user` is the same as when I would have done
user_from_db = DBSession.query(User).get(23)
assert user == user_from_db
用例是我有一个大模型,里面有很多复杂的东西 关系,但 90% 的时间我不需要这些数据。 所以我只想缓存直接属性以及我需要的其他内容 然后像上面那样从缓存中加载它们并能够 使用 sqlalchemy 模型,就像我从数据库中查询它一样。
【问题讨论】:
标签: python sqlalchemy