2009-11-22 29 views
13

¿Alguien tiene un ejemplo de cómo usar BLOB en SQLAlchemy?Ejemplo de uso de BLOB en SQLAlchemy

Saludos, Steve

+2

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. –

Respuesta

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

Ventajas de usar el paquete. +1 – pylover

0

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.

Cuestiones relacionadas