首页 > 解决方案 > 如何多次插入与 flask-sqlalchemy 的多对多关系?

问题描述

我正在使用 flask-sqlalchemy 来创建一个 RestAPI。这个想法是在其中存储具有一种或多种媒体的播放列表。为了将这两者联系起来,我使用了多对多关系。

有时,相同的媒体会在播放列表中插入两次,但由于关系表已经有条目而失败。

class Media(db.Model):
    __tablename__ = 'media'
    id = db.Column(db.Integer, primary_key=True)

medias = db.Table('media_playlist',
                  db.Column('media_id', db.Integer, db.ForeignKey('media.id'), primary_key=True),
                  db.Column('playlist_id', db.Integer, db.ForeignKey('playlist.id'), primary_key=True),
                  )

class Playlist(db.Model):
    __tablename__ = 'playlist'
    id = db.Column(db.Integer, primary_key=True)
    medias = db.relationship('Media',
                             secondary=medias,
                             lazy='subquery',
                             backref=db.backref('playlists', lazy=True))

链接错误:

UNIQUE constraint failed: media_playlist.media_id, media_playlist.playlist_id

您将如何存储多次相同的链接?

谢谢你,罗

标签: pythonsqlalchemymany-to-many

解决方案


为什么要设置primary_key=True外键列?SQLAlchemy 由于您正在制作列外键,这意味着它将存储多次相同的值,但是当您将其设为主键时,这意味着它需要是unique,现在您有此错误fails UNIQUE constraint。如果你希望它被索引,你不必做任何事情,因为默认情况下 DB 正在索引外键。


推荐阅读