2011-02-15 3 views
2

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?

Répondre

1
class EmailAddress(object): 

    @property 
    def email(self): 
     return self._email 

    @email.setter 
    def email(self, email): 
     self._email = email 

mapper(EmailAddress, addresses_table, properties={ 
    '_email': addresses_table.c.email 
}) 
+0

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

Questions connexes