【发布时间】:2022-01-27 19:54:11
【问题描述】:
我有一个不会经常更改的表,因此我希望将其缓存在客户端。那么是否有某种 hash value 或 last update time 可用于确定表是否已更新?如果没有,那么如何创建触发器来跟踪表中的更改?
Python - SQL Alchemy、Fast API、Postgres SQL
class Country(Base):
__tablename__ = 'country'
id: int = Column(Integer, primary_key=True)
class State(Base):
__tablename__ = 'state'
id: int = Column(Integer, primary_key=True)
class Cache(Base):
__tablename__ = 'cache'
index: int = Column(Integer, primary_key=True)
table_name: str = Column(String(64), nullable=False, unique=True)
sync_token: str = Column(String(40), nullable=False)
# triggers
@event.listens_for(Country, 'after_update')
def after_update(mapper, connection, target):
pass '''on any change in this table update the timestamp in the cache table'''
【问题讨论】:
-
虽然你的情况是相当静态的 - 最好不要这样做。构建和维护/同步多组状态(与客户端会话一样多)既困难又昂贵。这是一条永远不会有回报的滑溜溜的路。遵守“单一事实来源”规则,只在数据库中保留一个状态。
-
@Stefanov.sm 表格不会有太大变化——就像一个国家的名称和州数不太可能改变一样。我想要这个,因为如果它在任何遥远的可能性中发生变化,那么客户端应该能够反映相同的变化。
标签: python database postgresql sqlalchemy fastapi