2012-06-05 12 views
6

Tabelle:
ID (integer Primärschlüssel)
Daten (BLOB)mysql compress() mit sqlalchemy

Ich verwende mysql und sqlalchemy. Daten einzufügen ich verwenden:

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

Ich möchte wie die Tabelle einzufügen:

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

Wie kann ich diese mit sqlalchemy tun?

+0

'Objekt = Objekt()' scheint mir keine gute Idee. Sie überschreiben den Typnamen 'Objekt' ... – glglgl

+0

ich habe es geändert. Vielen Dank –

Antwort

1

Sie eine SQL-Funktion mit dem Attribut zuweisen können:

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

Hier ist ein Beispiel eine DB-agnostisch niedriger() Funktion:

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" 

können Sie es mit @validates automatisieren :

Wenn Sie möchten, dass es in Python vor dem Flush lesbar ist, müssen Sie es lokal notieren und verwenden Sie einen Deskriptor, um darauf zuzugreifen.