我是SQLAlchemy的新手并且有一个新手问题,希望有人可以帮助我。我正在开发一个Web应用程序,并希望能够执行以下三个步骤:
session
进行一些查询,并将结果保存在缓存中session
以将更改提交回数据库。根据我对docs(下面引用)的最佳理解,一个session
返回的对象不应与另一个session
共享。
确保Session一次只用在一个并发线程中称为“无共享”并发方法。但实际上,不共享会话意味着更重要的模式;它不仅意味着Session对象本身,还意味着与该Session关联的所有对象必须保持在单个并发线程的范围内。
因此,我采用以下相当繁琐的方法来执行上述步骤,但我想知道是否有更简单,更清洁的方法。谢谢!
我目前的方法:定义两个具有相同字段的数据结构,一个用于与SQLAlchemy交互,一个用于保存在缓存中。
class DBItem(Base):
__tablename__ = "item"
# Some fields.
class Item():
# Same fields as DBItem.
# Step 1: query database and save to cache.
session = Session()
db_item = session.query(...).first()
item = copy_DBItem_to_Item(db_item)
cache.set("some-key", item)
session.close()
# Step 2: use the cached item
item = cache.get("some-key")
# use `item` in a read-only fashion
# Step 3: update the item in cache and in database.
item = cache.get("some-key")
session = Session()
db_item = session.query(...).first()
# Perform the same update to `item` and `db_item`.
session.commit()
session.close()