Пример использования 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 выдается.