u kunt een SQL-functie toewijzen aan het attribuut:
from sqlalchemy import func
object.data = func.compress(mydata)
session.add(object)
session.commit()
Hier is een voorbeeld met een meer DB-agnostische lower()-functie:
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"
je kunt het automatisch maken met @validates:
from sqlalchemy.orm import validates
class MyClass(Base):
# ...
data = Column(BLOB)
@validates("data")
def _set_data(self, key, value):
return func.compress(value)
als je wilt dat het leesbaar is in python vóór de flush, moet je het lokaal in je geheugen opslaan en een descriptor gebruiken om er toegang toe te krijgen.