使用sqlalchemy选择UNCOMPRESS(text)FROM

时间:2012-07-10 10:47:57

标签: python sqlalchemy mysql-python

我存储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以便获取未压缩数据的任何想法。

1 个答案:

答案 0 :(得分:2)

对于在查询时呈现给SQL的特殊函数对象,

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

并且有效。