我存储MySQL Compress函数以将压缩的blob数据插入数据库。
在上一个问题中,我被指示使用
func.compress
(mysql Compress() with sqlalchemy)
现在的问题是我想要读取数据库中的数据。 在mysql中我会做的
SELECT UNCOMPRESS(text) FROM ...
可能我应该在课堂上使用一个getter。 我试着做一些事情:
get_html(self):
return func.uncompress(self.text)
但这不起作用。它返回sqlalchemy.sql.expression.Function而不是字符串。
此外,我找不到哪些函数包含sqlalchemy的函数。
关于我如何在对象中编写getter以便获取未压缩数据的任何想法。
答案 0 :(得分:2)
func
实际上是一个非常奇特的工厂对象 - 您无法在Python中评估它们,因为Python不知道您的数据库如何实现compress()
。这就是为什么它不起作用。
SQLAlchemy允许您映射SQL expressions to mapped class attributes。如果您正在使用声明性语法,请像这样扩展您的类(它未经测试,但我相信这是可行的方法):
from sqlalchemy.orm import column_property
class Demo(...):
data_uncompressed = column_property(func.uncompress(data))
现在只要SQLAlchemy从数据库加载实例,SELECT查询就会包含SELECT ..., UNCOMPRESS(demotable.data), ... FROM demotable
。
Giorgos Komninos编辑:
http://docs.sqlalchemy.org/en/rel_0_7/orm/mapper_config.html#using-a-plain-descriptor
并且有效。