python - SQLAlchemy 中的 cache_ok 标志是什么?
问题描述
我有SQLAlchemy的下一个自定义类型装饰器:
class TimeStamp(TypeDecorator):
impl = DateTime
cache_ok = True
LOCAL_TIMEZONE = datetime.utcnow().astimezone().tzinfo
def process_literal_param(self, value, dialect):
return self.imple.process_literal_param(value, dialect)
@property
def python_type(self):
return self.impl.python_type
def process_bind_param(self, value: datetime, dialect):
if value is None:
return None
if value.tzinfo is None:
value = value.astimezone(self.LOCAL_TIMEZONE)
return value.astimezone(timezone.utc)
def process_result_value(self, value, dialect):
if value is None:
return None
if value.tzinfo is None:
return value.replace(tzinfo=timezone.utc)
return value.astimezone(timezone.utc)
问题是SQLAlchemy要求我设置cache_ok
标志...我试图在文档中阅读有关此标志的信息,但对我来说仍然不清楚。我不知道SQLAlchemy是如何使用它的。
它缓存什么?我的类型装饰器适合缓存吗?
解决方案
最近遇到了这个问题,找到了你的问题,没有答案:( .. 看了更远,查看了文档 ..
TypeDecorator.cache_ok 类级别标志指示此自定义 TypeDecorator 是否可以安全地用作缓存键的一部分。此标志默认为 None ,当 SQL 编译器尝试为使用此类型的语句生成缓存键时,它最初会生成警告。如果不能保证 TypeDecorator 每次都产生相同的绑定/结果行为和 SQL 生成,则该标志应设置为 False;否则,如果该类每次都产生相同的行为,则可以将其设置为 True。有关其工作原理的更多说明,请参见 TypeDecorator.cache_ok。
https://docs.sqlalchemy.org/en/14/core/custom_types.html#sqlalchemy.types.TypeDecorator
.. 因此,如果您确信您的 TypeDecorator 始终为给定值生成相同的绑定/结果,那么请继续并通过cache_ok = True
在您的 TypeDecorator 类中设置值来发出该语句。
推荐阅读
- laravel - 如何使用 laravel carbon 更新数据库时间字段
- javascript - 当输入长字符串时,如何将文本保持在输入中
- c++ - 使用 openssl 以编程方式查找已协商的 TLS 版本
- c++ - C++ 函数给出“并非所有控制路径都返回值”错误
- scikit-learn - 如何使用外部模块在joblib中的线程之间共享变量
- mongodb - 唯一性值的 MongoDB 索引
- objective-c - 子类化 NSArrayController 绑定到自定义属性
- angular - Mat-autocomplete 不填充结果
- excel - 从列中的唯一值创建新工作表并粘贴整行 - 大型数据集
- reactjs - 为什么 PrivateRoute 会阻止我的 Redux 连接组件在存储状态更新时重新渲染?