2012-06-05 27 views
6

bảng:
id (phím số nguyên tiểu học)
dữ liệu (blob)mysql Compress() với SQLAlchemy

tôi sử dụng mysql và SQLAlchemy. Để chèn dữ liệu tôi sử dụng:

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

Tôi muốn chèn vào bảng như thế:

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

Làm thế nào tôi có thể làm điều này bằng SQLAlchemy?

+0

'object = object()' có vẻ không phải là một ý tưởng hay đối với tôi. Bạn đang ghi đè tên loại 'đối tượng' ... – glglgl

+0

tôi đã thay đổi nó. cảm ơn –

Trả lời

1

bạn có thể gán một hàm SQL vào thuộc tính:

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

Dưới đây là một ví dụ sử dụng một thấp hơn) chức năng hơn DB-agnostic (:

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" 

bạn có thể làm cho nó tự động với @validates :

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

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

nếu bạn muốn nó có thể đọc được trong trăn trước khi xả, bạn cần ghi nhớ cục bộ và sử dụng một bộ mô tả để truy cập nó.

Các vấn đề liên quan