如何在SQLAlchemy中建立与无类值的关系?

时间:2012-06-12 18:40:39

标签: python sqlalchemy flask-sqlalchemy

我在Flask下使用SQLAlchemy。我有一个表格,表示我的系统可以使用的模式。我还有一个表格,其中包含适用于每种模式的高程列表。 (所以这是一个多对多关系。)过去当我在映射到表的类中添加了一个属性(如elevations里面的ScanModes)时,目标也是一堂课。

将高程包装在一个类中是否更有意义(并创建一个相应的表?)所以我可以使用relationship使ScanModes.elevations工作,或者我应该使用query-enabled property }?我也愿意接受其他建议。

elevation_mode_table = db.Table('elevation_mode', db.metadata,
                                db.Column('scan_mode', db.String,
                                          db.ForeignKey('scan_modes'),
                                          nullable=False),
                                db.Column('elevation', db.Float,
                                          nullable=False),
                                db.PrimaryKeyConstraint('scan_mode', 
                                                        'elevation'))

class ScanModes(db.Model):
    scan_mode = db.Column(db.String, primary_key=True)
    elevations = ?

    def __init__(self, scan_mode):
        self.scan_mode = scan_mode

1 个答案:

答案 0 :(得分:3)

最直接的方法是将elevation_mode_table映射到一个类:

from sqlalchemy.orm import mapper
class ElevationMode(object):
    pass

mapper(ElevationMode, elevation_mode_table)

class ScanModes(db.Model):
    elevations = relationship(ElevationMode)

当然更容易让ElevationMode首先成为声明的类,如果你需要处理elev_mode_table,你可以从ElevationMode.__table__获得...

这里的“查询启用属性”这个想法,确定你也可以这样做,虽然你失去了关系的缓存优势。