2012-06-05 20 views
6

tabella:
id (chiave intera primaria)
dati (blob)mysql compressa() con sqlalchemy

uso mysql e SQLAlchemy. Per inserire i dati che uso:

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

Vorrei inserire al tavolo così:

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

Come posso fare questo usando SQLAlchemy?

+0

'object = object()' non mi sembra una buona idea. Stai sovrascrivendo il nome di tipo 'oggetto' ... – glglgl

+0

l'ho cambiato. Grazie –

risposta

1

è possibile assegnare una funzione SQL per l'attributo:

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

Ecco un esempio di utilizzo a) la funzione più DB-agnostic inferiore (:

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" 

si può rendere automatica con @validates :

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

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

se si vuole leggibile in python prima del colore, avresti bisogno di Memoize localmente e utilizzare un descrittore per accedervi.

Problemi correlati