hat jemand Beispiel, wie man BLOB in SQLAlchemy verwendet?Beispiel mit BLOB in SQLAlchemy
Grüße, Steve
hat jemand Beispiel, wie man BLOB in SQLAlchemy verwendet?Beispiel mit BLOB in SQLAlchemy
Grüße, 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)
Vorteile der Verwendung von Pack. +1 – pylover
Aus der Dokumentation BINARY scheint den Weg zu gehen: http://docs.sqlalchemy.org/en/latest/dialects/mysql.html
Klasse sqlalchemy.dialects.mysql.BLOB (Länge = None) Basen: sqlalchemy.types.LargeBinary
Der SQL-BLOB-Typ.
init (length = None) Konstruieren Sie einen LargeBinary-Typ.
Parameter: Länge - optional, eine Länge für die Spalte für die Verwendung in DDL Anweisungen, für die BLOB-Typen, die eine Länge (d. H. MySQL) akzeptieren. Es erzeugt keinen verlängerten BINARY/VARBINARY-Typ - verwenden Sie die BINARY/VARBINARY-Typen speziell für diese. Kann sicher weggelassen werden , wenn keine CREATE TABLE ausgegeben wird. Bestimmte Datenbanken benötigen möglicherweise eine Länge von für die Verwendung in DDL und verursachen eine Ausnahme, wenn die CREATE TABLE DDL ausgegeben wird.
Ich möchte ein Beispiel sehen, das ohne die ORM funktioniert. Ich denke, in diesem Fall müssen Sie den Blob-Wert, der an Connection.execute übergeben wurde, irgendwie umbrechen. –