【问题标题】:SELECT UNCOMPRESS(text) FROM with sqlalchemy使用 sqlalchemy 选择解压(文本)
【发布时间】:2012-07-09 19:59:41
【问题描述】:

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

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

func.compress

(mysql Compress() with sqlalchemy)

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

SELECT UNCOMPRESS(text) FROM ...

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

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

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

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

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

【问题讨论】:

    标签: python sqlalchemy mysql-python


    【解决方案1】:

    func 实际上是一个非常精美的工厂对象,用于在查询时呈现给 SQL 的特殊函数对象 - 您无法在 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

    它成功了。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-04
    • 2015-04-16
    • 1970-01-01
    • 2010-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多