2012-06-05 12 views
6

tabeli:
ID (element całkowitą podstawowa)
danych (blob)mysql Kompres() z sqlalchemy

użyć MySQL i SQLAlchemy. Aby wstawić dane używam:

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

chciałbym wstawić do tabeli tak:

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

W jaki sposób można zrobić to za pomocą SQLAlchemy?

+0

'object = object()' nie wydaje mi się dobrym pomysłem. Nadpisujesz nazwę typu 'object' ... – glglgl

+0

i zmieniłem to. dzięki –

Odpowiedz

1

można przypisać funkcję SQL do atrybutu:

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

Oto przykład stosując bardziej DB-agnostycznego dolną) funkcji (:

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" 

można je automatycznie z @validates :

from sqlalchemy.orm import validates 
class MyClass(Base): 
    # ... 
    data = Column(BLOB) 

    @validates("data") 
    def _set_data(self, key, value): 
     return func.compress(value) 

jeśli chcesz to czytelny w Pythonie przed spłukiwania, trzeba by go lokalnie memoize i użyj deskryptora, aby uzyskać do niego dostęp.