【发布时间】:2021-11-28 08:31:31
【问题描述】:
我注意到当有这样的模型时:
class User(Model):
id = ...
books = relationship('Book')
第一次调用user.books 时,SQLAlchemy 会查询数据库(例如当lazy='select' 时,这是默认设置),但随后调用user.books 时不会调用数据库。结果似乎已被缓存。
在使用查询方法时,我希望拥有与 SQLAlchemy 相同的功能,例如:
class User:
def get_books(self):
return Book.query.filter(Book.user_id == self.id).all()
但是在这样做时,如果我调用 3 次 get_books(),SQLAlchemy 会调用数据库 3 次(将 ECHO 属性设置为 True 时)。
如何更改 get_books() 以使用 SQLAlchemy 的缓存系统?
我坚持提到“来自 SQLAlchemy”,因为我相信他们处理刷新/删除/刷新系统,然后如果发生其中一种情况,则将更改重新查询到数据库。相反,如果我要在模型中简单地创建一个缓存属性,那么:
def get_books(self):
if self._books is None:
self._books = Book.query.filter(Book.user_id == self.id).all()
return self._books
这不适用于 SQLAlchemy 中的刷新/刷新/清除。
那么,如何更改 get_books() 以使用 SQLAlchemy 中的缓存系统?
【问题讨论】:
标签: python-3.x sqlalchemy