0

ビデオ テーブルの各エントリの「関連ビデオ」のリストを取得できるように、Flask-SQLAlchemy を使用して多対多の関係を設定しようとしています。

class Videos(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(100), unique=False)

    related_videos = db.relationship("Videos", \
        secondary = "related_videos", \
        primaryjoin="id==related_videos.c.video_id", \
        secondaryjoin = "id==related_videos.c.related_id", \
        backref ="related_to")

    def __init__(self, title, ytid):
        self.title = title

related_videos = db.Table("related_videos", \
    db.Column("video_id", db.Integer, db.ForeignKey("Videos.id")), \
    db.Column("related_id", db.Integer, db.ForeignKey("Videos.id")))

たとえば、新しいエントリを追加しようとするとexample = Videos("foobar")、エラーが発生します。

sqlalchemy.exc.ArgumentError: リレーションシップ Videos.related_videos で、primaryjoin 条件 'related_videos.video_id = :video_id_1' のリレーションシップの方向を特定できませんでした。

なぜそれが機能しないのかわかりません - 私が知る限り、私は SQLAlchemy のドキュメントとほとんど同じことをしています (私はおそらく間違っています!)

4

1 に答える 1

0

「related_videos」テーブルに同じ名前 (Videos.id) の 2 つのforeignKeys があるようです。

「related.id」という名前にするべきではありませんか?

また、関係にテーブル全体と同じ名前を付けましたが、それが正しいかどうかもわかりません。

于 2012-12-02T05:17:49.863 に答える