If you really want to use a dictionary, such as semantics, try SQLAlchemy associationproxy . The next (rather long) piece of code translates your dictionary into Key, Value-Pairs into entries -Table. I don't know how SQLAlchemy handles your large dictionary, but SQLite should do it well.
from sqlalchemy import create_engine, MetaData from sqlalchemy import Table, Column, Integer, ForeignKey, Unicode, UnicodeText from sqlalchemy.orm import mapper, sessionmaker, scoped_session, Query, relation from sqlalchemy.orm.collections import column_mapped_collection from sqlalchemy.ext.associationproxy import association_proxy from sqlalchemy.schema import UniqueConstraint engine = create_engine('sqlite:///newspapers.db') metadata = MetaData() metadata.bind = engine Session = scoped_session(sessionmaker(engine)) session = Session() newspapers = Table('newspapers', metadata, Column('newspaper_id', Integer, primary_key=True), Column('newspaper_name', Unicode(128)), ) entries = Table('entries', metadata, Column('entry_id', Integer, primary_key=True), Column('newspaper_id', Integer, ForeignKey('newspapers.newspaper_id')), Column('entry_key', Unicode(255)), Column('entry_value', UnicodeText), UniqueConstraint('entry_key', 'entry_value', name="pair"), ) class Base(object): def __init__(self, **kw): for key, value in kw.items(): setattr(self, key, value) query = Session.query_property(Query) def create_entry(key, value): return Entry(entry_key=key, entry_value=value) class Newspaper(Base): entries = association_proxy('entry_dict', 'entry_value', creator=create_entry) class Entry(Base): pass mapper(Newspaper, newspapers, properties={ 'entry_dict': relation(Entry, collection_class=column_mapped_collection(entries.c.entry_key)), }) mapper(Entry, entries) metadata.create_all() dictionary = { u'foo': u'bar', u'baz': u'quux' } roll = Newspaper(newspaper_name=u"The Toilet Roll") session.add(roll) session.flush() roll.entries = dictionary session.flush() for entry in Entry.query.all(): print entry.entry_key, entry.entry_value session.commit() session.expire_all() print Newspaper.query.filter_by(newspaper_id=1).one().entries
gives
foo bar baz quux {u'foo': u'bar', u'baz': u'quux'}