我在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
答案 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__
获得...
这里的“查询启用属性”这个想法,确定你也可以这样做,虽然你失去了关系的缓存优势。