gpt4 book ai didi

python - 如何使用 Flask SQLAlchemy 查询多对多

转载 作者:太空宇宙 更新时间:2023-11-03 15:56:53 25 4
gpt4 key购买 nike

导入 FlaskSQLAlchemy 后:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

我继续声明 appdb 对象:

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///inquestion.db'
db = SQLAlchemy(app)

我继续创建三个表:GenreAlbumArtist。由于 Artist 可以链接到多个 Albums 并且 Albums 可以包含多个 Artists 我需要多对多属性,所以有将是第四个表,用于将 Artist 存储到 Album id:

albums_to_artists_table = db.Table('albums_to_artists_table',
db.Column('album_id', db.Integer, db.ForeignKey('album.id')),
db.Column('artist_id', db.Integer, db.ForeignKey('artist.id')))

class Genre(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80), unique=True)

class Album(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50))
artists = db.relationship('Artist', backref='album', lazy='dynamic', secondary=albums_to_artists_table)

class Artist(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80), unique=True)
genre_id = db.Column(db.Integer, db.ForeignKey('genre.id'))

_albums = db.relationship('Album', secondary=albums_to_artists_table, backref=db.backref('albums_to_artists_table_backref', lazy='dynamic'))

最后我创建数据库:

db.drop_all()
db.create_all()

genre = Genre(name='Disco')
db.session.add(genre)
db.session.commit()

album1 = Album(name='Main Course')
album2 = Album(name='Spirits Having Flown')
db.session.add(album1)
db.session.add(album2)
db.session.commit()

artist = Artist(name='Bee Gees', genre_id = genre.id, _albums=[album1, album2])
db.session.add(artist)
db.session.commit()

现在我可以查询哪些艺术家与给定的流派相关:

Artist.query.filter_by(genre_id = genre.id).all()

我还可以查询艺术家连接到哪些专辑:

Album.query.filter(Album.artists.any(name='Bee Gees')).all() 

但是我如何查询哪些艺术家与给定的流派相关?换句话说,我想收集链接到具有给定 genre.idGenre 的所有 Artists

最佳答案

But how do I query what Artists are connected to a given Genre? By other words, I want to collect all the Artists linked to a Genre with a given genre.id?

您在问题中给出了一个具体执行此操作的示例,按 Genre 获取 Artist。我想你实际上想问的是如何通过Genre获取Album,对吗?如果是这样,请尝试这样的事情:

Album.query.join(Artist).join(Genre).filter(Genre.id==YOUR_GENRE_ID).all()

关于python - 如何使用 Flask SQLAlchemy 查询多对多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40698437/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com