1

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の関数が含まれているかがわかりませんでした。

圧縮されていないデータを取り戻すために、オブジェクトにゲッターを書き込む方法に関するアイデア。

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 に答える