J'essaie de stocker des mesures de simulation (temps et valeurs) à l'aide de sqlalchemy. Voici les définitions de tables pertinentes. S'il y a une définition de table plus sensible, j'aimerais le voir.SQLalchemy: mappage de colonnes en différentes propriétés
from sqlalchemy import create_engine, schema, orm
engine = create_engine('sqlite:///:memory:', echo=True)
metadata = schema.MetaData(bind=engine)
container_table = schema.Table('containers', metadata,
schema.Column('id', schema.types.Integer, primary_key=True))
measurement_table = schema.Table('measurements', metadata,
schema.Column('id', schema.types.Integer, primary_key=True),
schema.Column('container_id', schema.types.Integer,
schema.ForeignKey('containers.id')),
schema.Column('time', schema.types.Float),
schema.Column('value', schema.types.Float))
metadata.create_all()
Les temps seront uniques pour chaque conteneur, et les propriétés ci-dessous doivent être triées par heure.
Je voudrais être en mesure de lire et attribuer ces propriétés:
c = Container()
times = range(10)
values = [t**2 for t in times]
c.times = times
c.values = values
Mais je ne sais pas comment faire la cartographie. Je suppose que si cela est possible, cela ressemblera à ceci:
class Container(object):
times = some_sort_of_proxy()
values = some_sort_of_proxy()
orm.mapper(Container, container_table, properties={
# Magic
})
Comment est-ce que je fais cela? Est-ce un mappage raisonnable ou dois-je avoir une structure de table sous-jacente différente?
Je sais comment les propriétés fonctionnent. Le point de la question est que mon implémentation actuelle (basée sur la propriété) crée beaucoup d'objets inutiles (tuples de paire x-y). Je pense que la meilleure solution est en fait d'utiliser un blob, je n'ai tout simplement pas eu l'occasion de publier ma propre réponse. – Mark