¿Alguien tiene un ejemplo de cómo usar BLOB en SQLAlchemy?Ejemplo de uso de BLOB en SQLAlchemy
Saludos, Steve
¿Alguien tiene un ejemplo de cómo usar BLOB en SQLAlchemy?Ejemplo de uso de BLOB en SQLAlchemy
Saludos, Steve
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
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)
Ventajas de usar el paquete. +1 – pylover
A partir de la documentación BINARIO parece el camino a seguir: http://docs.sqlalchemy.org/en/latest/dialects/mysql.html
clase sqlalchemy.dialects.mysql.BLOB (longitud = None) Bases: sqlalchemy.types.LargeBinary
Tipo de SQL BLOB.
init (longitud = Ninguna) Construya un tipo LargeBinary.
Parámetros: length - optional, una longitud para la columna para el uso en sentencias DDL , para los tipos BLOB que aceptan una longitud (es decir, MySQL). Es no produce un tipo BINARIO/VARBINARIO alargado - utilice los tipos BINARY/VARBINARY específicamente para aquellos. Se puede omitir con seguridad si no se emitirá CREATE TABLE. Ciertas bases de datos pueden requerir una longitud de para su uso en DDL, y generarán una excepción cuando se emite CREATE TABLE DDL.
Me gustaría ver un ejemplo, que funciona sin el orm. Supongo que, en ese caso, debe ajustar de alguna forma el valor de blob pasado a Connection.execute. –