Как я могу вставить несколько раз отношение «многие ко многим» с flask -sqlalchemy? - PullRequest
0 голосов
/ 10 апреля 2020

Я использую 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

Как бы вы сохранили несколько раз одну и ту же ссылку?

Спасибо, Ром

1 Ответ

0 голосов
/ 10 апреля 2020

Почему вы устанавливаете primary_key=True для столбцов внешнего ключа? SQLAlchemy Поскольку вы создаете внешний ключ столбца, это означает, что он будет хранить несколько раз одно и то же значение, но когда вы делаете его первичным ключом, это означает, что оно должно быть unique, и теперь у вас есть эта ошибка fails UNIQUE constraint. Если вы хотите, чтобы он был проиндексирован, вам не нужно ничего делать, поскольку БД индексирует внешние ключи по умолчанию.

...