2009-11-22 32 views
13

có ai có ví dụ về cách sử dụng BLOB trong SQLAlchemy không?Ví dụ sử dụng BLOB trong SQLAlchemy

Kính trọng, Steve

+2

Tôi muốn xem ví dụ, hoạt động không có orm. Tôi đoán trong trường hợp đó bạn cần phải bằng cách nào đó quấn các giá trị blob thông qua để Connection.execute. –

Trả lời

16
from sqlalchemy import * 
from sqlalchemy.orm import mapper, sessionmaker 
import os 

engine = create_engine('sqlite://', echo=True) 
metadata = MetaData(engine) 

sample = Table(
    'sample', metadata, 
    Column('id', Integer, primary_key=True), 
    Column('lob', Binary), 
) 

class Sample(object): 

    def __init__(self, lob): 
     self.lob = lob 

mapper(Sample, sample) 

metadata.create_all() 

session = sessionmaker(engine)() 

# Creating new object 
blob = os.urandom(100000) 
obj = Sample(lob=blob) 
session.add(obj) 
session.commit() 
obj_id = obj.id 
session.expunge_all() 

# Retrieving existing object 
obj = session.query(Sample).get(obj_id) 
assert obj.lob==blob 
4
from sqlalchemy import * 
from sqlalchemy.orm import sessionmaker 
from sqlalchemy.ext.declarative import declarative_base 

from struct import * 

_DeclarativeBase = declarative_base() 

class MyTable(_DeclarativeBase): 
    __tablename__ = 'mytable' 
    id = Column(Integer, Sequence('my_table_id_seq'), primary_key=True) 
    my_blob = Column(BLOB) 

DB_NAME = 'sqlite:///C:/BlobbingTest.db' 
db = create_engine(DB_NAME) 
#self.__db.echo = True 
_DeclarativeBase.metadata.create_all(db) 
Session = sessionmaker(bind=db) 
session = Session() 

session.add(MyTable(my_blob=pack('H', 365))) 
l = [n + 1 for n in xrange(10)] 
session.add(MyTable(my_blob=pack('H'*len(l), *l))) 
session.commit() 

query = session.query(MyTable) 
for mt in query.all(): 
    print unpack('H'*(len(mt.my_blob)/2), mt.my_blob) 
+0

Ưu điểm của việc sử dụng gói. +1 – pylover

0

Từ Binary tài liệu dường như con đường để đi: http://docs.sqlalchemy.org/en/latest/dialects/mysql.html

lớp sqlalchemy.dialects.mysql.BLOB (chiều dài = Không) Căn cứ: sqlalchemy.types.LargeBinary

Loại BLOB SQL.

init (length = None) Tạo một loại LargeBinary.

Tham số: độ dài - tùy chọn, độ dài cho cột để sử dụng trong các tuyên bố DDL , cho các loại BLOB chấp nhận độ dài (ví dụ: MySQL). Nó không tạo ra kiểu BINARY/VARBINARY có độ dài - sử dụng các kiểu nhị phân/BẢNG CHỌN đặc biệt cho những loại này. Có thể được bỏ qua một cách an toàn nếu không có TẠO TẠO sẽ được phát hành. Một số cơ sở dữ liệu có thể yêu cầu chiều dài để sử dụng trong DDL và sẽ tăng ngoại lệ khi CREATE BẢNG DDL được phát hành.

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