1

我存储 MySQL Compress 函数以将压缩的 blob 数据插入数据库。

在上一个问题中,我被指示使用

func.compress

( mysql Compress() 与 sqlalchemy )

现在的问题是我还想从数据库中读取数据。在mysql中我会做

SELECT UNCOMPRESS(text) FROM ...

可能我应该在课堂上使用吸气剂。我试图做类似的事情:

get_html(self):
    return func.uncompress(self.text)

但这不起作用。它返回一个 sqlalchemy.sql.expression.Function 而不是字符串。

此外,我找不到哪些函数包含 sqlalchemy 的函数。

关于如何在对象中编写吸气剂的任何想法,以便我取回未压缩的数据。

4

1 回答 1

2

func实际上是一个非常花哨的工厂对象,用于在查询时呈现给 SQL 的特殊函数对象 - 您无法在 Python 中评估它们,因为 Python 不知道您的数据库是如何实现的compress()。这就是为什么它不起作用。

SQLAlchemy 允许您将SQL 表达式映射到映射的类属性。如果您使用的是声明性语法,请像这样扩展您的类(它未经测试,但我相信这是要走的路):

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

它奏效了。

于 2012-07-10T12:27:58.977 回答