Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用Alchemy查询多对多_Python_Flask_Sqlalchemy - Fatal编程技术网

Python 如何使用Alchemy查询多对多

Python 如何使用Alchemy查询多对多,python,flask,sqlalchemy,Python,Flask,Sqlalchemy,导入Flask和SQLAlchemy后: from flask import Flask from flask_sqlalchemy import SQLAlchemy 我继续声明app和db对象: app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///inquestion.db' db = SQLAlchemy(app) 我继续创建三个表:Genre、Album和Artist。 由于艺术家可以链接

导入
Flask
SQLAlchemy
后:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
我继续声明
app
db
对象:

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///inquestion.db' 
db = SQLAlchemy(app)
我继续创建三个表:
Genre
Album
Artist
。 由于
艺术家
可以链接到多个
相册
并且
相册
可以包含多个
艺术家
我需要多对多属性,因此将有第四个表用于存储
艺术家
相册
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() 
但是,我如何查询哪些
艺术家
与给定的
流派
相关?换句话说,我想收集所有链接到
流派
艺术家
,他们有一个给定的
流派.id

但是,我如何质疑哪些艺术家与某一特定流派有关联?换句话说,我想收集所有与某个特定流派相关的艺术家。id

你在问题中给出了一个这样做的例子,通过
流派
获得
艺术家
。我想你真正想问的是如何通过
流派
获得
专辑
,对吗?如果是这样,请尝试以下方法:

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