2012-07-10 2 views
1

MySQL 압축 함수를 저장하여 압축 된 BLOB 데이터를 데이터베이스에 삽입합니다. SELECT UNCOMPRESS (text) from sqlalchemy

는 이전 질문에서 나는

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를 쓸 수있는 방법에 대한 아이디어가 있으므로 압축되지 않은 데이터가 반환됩니다.

답변

2

func은 실제로는 쿼리 할 때 SQL로 렌더링되는 특수 함수 객체의 멋진 팩토리 객체입니다. Python은 데이터베이스가 compress()을 구현하는 방법을 알지 못하기 때문에이를 평가할 수 없습니다. 그것이 작동하지 않는 이유입니다.

SQLAlchemy를 사용하면 SQL expressions to mapped class attributes을 매핑 할 수 있습니다. 당신은 선언적 구문을 사용하는 경우, 다음처럼 클래스를 확장 (이 검증되지 않은,하지만 난이 길을 가야하는 것입니다 확신) : SQLAlchemy의 데이터베이스에서 인스턴스를로드 할 때마다 지금

from sqlalchemy.orm import column_property 

class Demo(...): 
    data_uncompressed = column_property(func.uncompress(data)) 

의 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

답변 해 주셔서 감사합니다. 그 해결책을 찾는데 도움이되었습니다. –

+0

난 그냥 waht 추가하고 답변을 올바른 표시 –

+1

문서에 대한 최신 링크 : http://docs.sqlalchemy.org/en/rel_1_0/orm/mapped_sql_expr.html#using-column-property – TheRealNeo