我正在尝试使用sqlalchemy存储一些模拟测量值(时间和值)。以下是相关的表定义。如果有一个更明智的表格定义,我很乐意看到它。
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()
每个容器的时间都是唯一的,下面的属性应按时间排序。
我希望能够同时阅读和分配这些属性:
c = Container()
times = range(10)
values = [t**2 for t in times]
c.times = times
c.values = values
但我不知道如何进行映射。我假设如果可能,它看起来像这样:
class Container(object):
times = some_sort_of_proxy()
values = some_sort_of_proxy()
orm.mapper(Container, container_table, properties={
# Magic
})
我该怎么做呢?这是一个合理的映射,还是我需要一个不同的基础表结构?
答案 0 :(得分: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
})