我有一个myTypeSA
的子类sqlalchemy.types.TypeDecorator
,它定义process_bind_param
和process_result_value
,如下所示,以允许myType
个实例持久存储到数据库中:
class myTypeSA(types.TypeDecorator):
""" Decorate String type to translate myType instance into String in the database"""
impl = types.String(15)
def process_bind_param(self, value, dialect):
if value is None:
return None
assert type(value) == myType
return value.as_str()
def process_result_value(self, value, dialect):
if value is None:
return None
return myType.from_str(value)
在提交的某个时刻,sqlalchemy似乎试图查看对象是否已更改,并调用默认为sa.String TypeDecorator.compare_values
的{{1}},即compare_values
。这实际上只是TypeEngine.compare_values
,在我的情况下断言,因为x是x == y
的实例而y是sqlalchemy字符串:myType
。
我很想直接覆盖NO_VALUE
以解决此问题,但我想知道我是否遗漏了某些内容,应该覆盖TypeDecorator.compare_values
或coerce_compared_value
;详细说明何时使用这些方法的评论对我来说不是很清楚。如何处理与process_literal_param
的比较?
由于