Пример использования BLOB в SQLAlchemy

У кого-нибудь есть пример использования BLOB в SQLAlchemy?

С уважением, Стив

Ответы

Ответ 1

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

Ответ 2

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)

Ответ 3

Из документации BINARY кажется способ перехода: http://docs.sqlalchemy.org/en/latest/dialects/mysql.html

класс sqlalchemy.dialects.mysql.BLOB(длина = нет) Базы: sqlalchemy.types.LargeBinary

Тип SQL BLOB.

init (length = None) Построить тип LargeBinary.

Параметры: длина - необязательно, длина столбца для использования в DDL операторов, для тех типов BLOB, которые принимают длину (то есть MySQL). Это не создает удлиненный тип BINARY/VARBINARY - используйте BINARY/VARBINARY типы специально для них. Может быть безопасно опущено если не будет выведено CREATE TABLE. Для некоторых баз данных может потребоваться длина для использования в DDL, и вызовет исключение, когда CREATE TABLE DDL выдается.