2012-06-05 15 views
6

तालिका साथ mysql कम्प्रेस():
आईडी (पूर्णांक प्राथमिक कुंजी)
डेटा (ब्लॉब)SQLAlchemy

मैं mysql और SQLAlchemy का उपयोग करें। डेटा सम्मिलित करने के लिए मैं का उपयोग करें:

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

मुझे लगता है कि जैसे मेज पर सम्मिलित करना चाहते हैं:

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

मैं इस SQLAlchemy का उपयोग कर सकते कैसे?

+0

'object = object() 'मुझे लगता है कि यह एक अच्छा विचार नहीं है। आप टाइप ऑब्जेक्ट 'ऑब्जेक्ट' ओवरराइट कर रहे हैं ... – glglgl

+0

मैंने इसे बदल दिया। धन्यवाद –

उत्तर

1

आप विशेषता के लिए एक एसक्यूएल समारोह असाइन कर सकते हैं:

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

यहाँ एक अधिक डीबी नास्तिक कम() फ़ंक्शन का उपयोग कर एक उदाहरण है:

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) 

आप इसे फ्लश से पहले अजगर में पठनीय चाहते हैं, तो आप इसे स्थानीय स्तर पर memoize नहीं करनी होंगी और इसे एक्सेस करने के लिए एक वर्णक का उपयोग करें।