mysql Compress()与sqlalchemy

发布于 2021-01-29 16:35:31


ID (整数主键)
数据 (blob)

我使用mysql和sqlalchemy。要插入数据,我使用:

o = Demo()
o.data = mydata
session.add(o)
session.commit()

我想这样插入表:

INSERT INTO table(data) VALUES(COMPRESS(mydata))

如何使用sqlalchemy做到这一点?

关注者
0
被浏览
47
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    您可以将SQL函数分配给属性:

    from sqlalchemy import func
    object.data = func.compress(mydata)
    session.add(object)
    session.commit()
    

    这是使用与数据库无关的lower()函数的示例:

    from sqlalchemy import *
    from sqlalchemy.orm import *
    from sqlalchemy.ext.declarative import declarative_base
    
    Base= declarative_base()
    
    class A(Base):
        __tablename__ = "a"
    
        id = Column(Integer, primary_key=True)
        data = Column(String)
    
    e = create_engine('sqlite://', echo=True)
    Base.metadata.create_all(e)
    s = Session(e)
    
    a1 = A()
    a1.data = func.lower("SomeData")
    s.add(a1)
    s.commit()
    
    assert a1.data == "somedata"
    

    您可以使用@validates将其自动设置为:

    from sqlalchemy.orm import validates
    class MyClass(Base):
        # ...
        data = Column(BLOB)
    
        @validates("data")
        def _set_data(self, key, value):
            return func.compress(value)
    

    如果希望在刷新之前在python中可读它,则需要在本地对其进行记忆并使用描述符进行访问。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看