2

Flask で SQLAlchemy を使用しています。システムが使用できるモードを表すテーブルがあります。また、各モードに適用できる標高のリストを含むテーブルもあります。(したがって、これは多対多の関係です。) 以前、テーブルにマップされたクラスに属性 (ここのelevations内部のようにScanModes) を追加したとき、ターゲットもクラスでした。

relationshipクラスで標高をラップする (および対応するテーブルを作成する) ことはより理にかなっていScanModes.elevationsます? 他の提案も受け付けています。

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
4

1 に答える 1

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 を最初に宣言されたクラスにするだけでも簡単です。elevation_mode_table を処理する必要がある場合は、それを取得しElevationMode.__table__ます...

ここでの「クエリが有効なプロパティ」のアイデアは、リレーションシップのキャッシュの利点を失うことになりますが、確かにそれも可能です。

于 2012-06-12T22:10:36.540 に答える