Я пытаюсь добавить блок текста в таблицу sqlAlchemy, которую я хочу сжать, чтобы сэкономить место на нем. Просматривая различные ответы, я пришел к выводу, что, по моему мнению, должно работать, но это не так. Я работаю с базой данных sqlite.
Обновлено: было указано, что я пытался использовать mysql на sqlite, но я не знал, что именно так и происходит. Я настроен на использование zlib вместо этого, и это работает до такой степени, что дает мне новую ошибку, которую я не понимаю.
# proper imports and stuff to make this work
from sqlalchemy import func
class Data(Base):
__tablename__ = 'data'
# ...
text_blobbed = Column('text', BLOB)
@hybrid_property
def text(self):
# return func.decompress(self.text_blobbed)
return self.text_blobbed.decode("zlib")
@text.setter
def text(self, stuff):
# self.text_blobbed = func.compress(stuff)
self.text_blobbed = stuff.encode("zlib")
старая ошибка от func.
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such function: compress [SQL: ...... ]
Теперь я могу добавить текст через Data.text = "действительно большой блок текста"
Но когда я иду на запрос, как это
session.query(Data.text).filter(Data.id.like(2)).first()
Я получаю ошибку:
AttributeError: Ни объект «InstrumentedAttribute», ни объект «Comparator», связанный с Data.text_blobbed, не имеют атрибута «decode»
Делать это хорошо.
r = session.query(Data).filter(Data.id.like(2)).first()
print r.text
Я также посмотрел на text_blobbed, который является множеством (). И я могу сделать это, что работает:
r = session.query(Data.text_blobbed.filter( ... ).first()[0].decode("zlib")
print r
Но если я переместу это [0] в hybrid_property для
...
return self.text_blobbed[0].decode("zlib")
и запрос:
r = session.query(Data.text).filter( ... ).first()
Я получаю ошибку:
NotImplementedError: Оператор 'getitem' не поддерживается в этом выражении
Итак, я немного растерялся.
Я смотрел на эти вещи:
SQLAlchemy - Написание гибридного метода для подсчета детей
mysql Compress () с sqlalchemy
ВЫБРАТЬ НЕКОМПРЕСС (текст) ОТ с sqlalchemy
http://docs.sqlalchemy.org/en/latest/orm/mapped_sql_expr.html?highlight=descriptor