2012-07-10 58 views
1

我存儲MySQL壓縮函數以將壓縮的blob數據插入數據庫。使用sqlalchemy選擇UNCOMPRESS(文本)FROM

在先前的問題,我奉命使用

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的func。

關於如何在對象中寫入getter的任何想法,以便找回未壓縮的數據。

回答

2

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

和它的工作。

+0

謝謝你的回答。它幫助我找到解決方案。 – 2012-07-10 14:23:26

+0

我只是添加了我所做的並標記了正確的答案 – 2012-07-10 14:25:09

+1

最新的文檔鏈接:http://docs.sqlalchemy.org/en/rel_1_0/orm/mapped_sql_expr.html#using-column-property – TheRealNeo 2016-05-18 19:14:00