我正在使用 TypeDecorator 进行 Json 提取,而另一个模型将其用于其中一个列。我正在使用这个 TypeDecorator 存储 python 列表对象。
def process_bind_param(self, value, dialect):
# etc...
def process_result_value(self, value, dialect):
# THIS NEVER GETS CALLED!!
if value is not None:
return json.loads(value)
return value
当我在使用装饰器的模型中存储数据时,会适当地调用 bind_param。现在,我使用 TypeDecorator 通过以下方式从模型中提取模式:
table = Table(table_name, meta, autoload=True, autoload_with=sengine)
现在进行查询测试(有很多方法可以循环和提取):
for record in source.query(table).all():
print type(record.column_using_custom_type_list_object) == str
# returns true ... this should be false ... should be of type list
# json.loads() returns type list ???
print record.column_using_custom_type_list_object[some_index]
# naturally this prints a character in the string, not a cell
问题是在查询表并获取对象和列时未调用 process_result_value()。我假设 SQLAlchemy 反射处理依赖关系?我是否在构造函数中缺少一些选项来传输需要自定义类型装饰器的元数据?