가져 오기 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)
는 세 개의 테이블이 있습니다 : Artist
, Album
및 Genre
. Artist
개체는 여러 Albums
에 연결할 수 있습니다. 개체는 여러 Artists
에 연결할 수 있습니다.
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(80), unique=True)
genre_id = db.Column(db.Integer, db.ForeignKey('genre.id'))
artists = db.relationship('Artist', backref='albums', 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)
_albums = db.relationship('Album', secondary=albums_to_artists_table, backref=db.backref('albums_to_artists_table_backref', lazy='dynamic'))
그래서 우리가
Genre
에 연결되어있는
Album
에 연결된
Artist
을 가지고 있고 그것은 다음과 같습니다 :
Artist
>
Album
>
Genre
albums_to_artists_table
는
Artists
꽉
Albums
사이의 관계를 유지하는 것입니다.
데 우리가 가서 먼저 Genre
개체를 만드는 장소에서이 설정 :
db.drop_all()
db.create_all()
genre = Genre(name='Heavy Metal')
db.session.add(genre)
db.session.commit()
:
album1 = Album(name='Ride the Lightning', genre_id = genre.id)
album2 = Album(name='Master of Puppets ', genre_id = genre.id)
db.session.add(album1)
db.session.add(album2)
db.session.commit()
그리고 작가 다음 후
artist = Artist(name='Metallica', _albums=[album1, album2])
db.session.add(artist)
db.session.commit()
우리는 Albums
이에 연결된 쿼리를 생성 할 수 있습니다.:
print Album.query.filter_by(genre_id=1).all()
어떤 Artists
가 Album
에 연결되어 있습니다 :
print Artist.query.filter(Artist._albums.any(id=album1.id)).all()
은 지금은 조회하고자하는 모든 genre.id을 통과하는 Genre
에 링크 된 Artists
. 그것을 성취하는 방법?
Artist.albums.any()
에 필터를 적용 할 수 있습니다
흠, 당신의 관계는 아무튼 내게 맞는 것 같아. 당신의 현재 관계로 한 앨범은 단 하나의 장르 밖에 가질 수 없다. 이는 장르가 X 장르에 링크되어있는 아티스트의 경우 그는 x 개의 앨범도 가지고 있어야합니다 .... 당신이 의도 한 것입니까? – danidee
예, 앨범과 장르가 일대일 관계를 갖는 것은 의도적입니다. – alphanumeric