【问题标题】:mysql Compress() with sqlalchemymysql Compress() 与 sqlalchemy
【发布时间】:2012-06-05 09:22:24
【问题描述】:

表:
id(整数主键)
数据(blob)

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

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

我想这样插入表格:

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

如何使用 sqlalchemy 做到这一点?

【问题讨论】:

  • object = object() 对我来说似乎不是一个好主意。您正在覆盖类型名称object...

标签: python mysql sqlalchemy


【解决方案1】:

您可以为属性分配一个 SQL 函数:

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

这是一个使用更多与 DB 无关的 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 中可读,你需要在本地记忆它并使用描述符来访问它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-03
    • 2011-05-02
    • 1970-01-01
    • 2017-07-04
    • 2011-07-16
    • 2015-10-11
    • 1970-01-01
    相关资源
    最近更新 更多