Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python sqlAlchemy通过混合属性访问blob?_Python_Sqlalchemy - Fatal编程技术网

Python sqlAlchemy通过混合属性访问blob?

Python sqlAlchemy通过混合属性访问blob?,python,sqlalchemy,Python,Sqlalchemy,我正在尝试向sqlAlchemy表中添加一个文本块,我希望对其进行压缩以节省空间。通过各种各样的答案,我得出了我认为应该有效,但不可行的结论。我正在使用sqlite数据库 更新:有人指出我试图在sqlite上使用mysql,但我不知道发生了什么。我改为使用zlib,它在一定程度上起作用,这给了我一个我不理解的新错误 # proper imports and stuff to make this work from sqlalchemy import func class Data(Base):

我正在尝试向sqlAlchemy表中添加一个文本块,我希望对其进行压缩以节省空间。通过各种各样的答案,我得出了我认为应该有效,但不可行的结论。我正在使用sqlite数据库

更新:有人指出我试图在sqlite上使用mysql,但我不知道发生了什么。我改为使用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”对象都没有属性“decode”

这样做很好

r = session.query(Data).filter(Data.id.like(2)).first()
print r.text
我还查看了文本_blobbed,它是一个set()。我可以做到这一点:

r = session.query(Data.text_blobbed.filter( ... ).first()[0].decode("zlib")
print r
但是如果我将[0]移动到

...
return self.text_blobbed[0].decode("zlib")
和查询:

r = session.query(Data.text).filter( ... ).first()
我得到一个错误: NotImplementedError:此表达式不支持运算符“getitem”

所以,我还是有点困惑

我一直在看这些东西:


并且似乎是MySQL函数。您似乎正在使用SQLite。如果您打算使用SQLite,您可以在Python端使用它进行压缩和解压缩。在这种情况下,您可能需要一个@IljaEverilä与您的第一个评论,我没有意识到我正在寻找mysql的唯一选项。这让我开始关注zlib编码/解码,它将数据输入sqlite数据库。是的,它需要是一个sqlite,因为我没有运行任何类型的mysql服务器或后端,这基本上是一个测试。不幸的是,直接查询数据时失败。text的AttributeError既不是“InstrumentedAttribute”对象,也不是与数据关联的“Comparator”对象。text_blobbed的属性是“decode”,但更接近。只对数据执行查询,然后转到Data.text即可。