пытается получить данные из одной таблицы в другую AttributeError: объект BaseQuery не имеет атрибута - PullRequest
0 голосов
/ 25 мая 2020

Я пытаюсь перенести данные из моих шоу в атрибут artist.past_shows. Я использую flask_sqlalchemy. Я получаю сообщение об ошибке:

AttributeError: 'BaseQuery' object has no attribute 'past_shows'

Я не совсем понимаю, как это сделать. Я пытаюсь сделать такой запрос:

artist = Artist.query.join(Artist.past_shows).filter(Artist.id==artist_id, Show.artist_id==artist_id)

Это мои модели:

class Venue(db.Model):
    __tablename__ = 'venue'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String())
    city = db.Column(db.String(120))
    state = db.Column(db.String(120))
    address = db.Column(db.String(120))
    phone = db.Column(db.String(120))
    image_link = db.Column(db.String(500))
    facebook_link = db.Column(db.String(120))
    seeking_talent = db.Column(db.Boolean, default=False)
    seeking_description = db.Column(db.String())
    genres = db.Column(db.ARRAY(db.String))
    website = db.Column(db.String())
    pastshows = db.relationship('Show', backref='pastshows', lazy=True)

class Artist(db.Model):
    __tablename__ = 'artist'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String)
    city = db.Column(db.String(120))
    state = db.Column(db.String(120))
    phone = db.Column(db.String(120))
    genres = db.Column(db.ARRAY(db.String))
    image_link = db.Column(db.String(500))
    facebook_link = db.Column(db.String(120))
    seeking_venue = db.Column(db.Boolean, nullable=False, default=False)
    seeking_description = db.Column(db.String())
    website = db.Column(db.String())
    past_shows = db.relationship('Show', backref='past_shows', lazy=True)

class Show(db.Model):
    __tablename__ = 'show'
    id = db.Column(db.Integer, primary_key=True)
    venue_id = db.Column(db.Integer, db.ForeignKey('venue.id'), nullable=False)
    artist_id = db.Column(db.Integer, db.ForeignKey('artist.id'), nullable=False)
    artist_name = db.Column(db.String())
    venue_name = db.Column(db.String())
    venue_image = db.Column(db.String())
    start_time = db.Column(db.DateTime(), nullable=False)

Как мне получить данные шоу для идентификатора исполнителя, который я запрашиваю у исполнителя .past_shows?

Ответы [ 2 ]

0 голосов
/ 28 мая 2020

Я понял это, создав объект данных и поместив в него данные с помощью циклов for.

0 голосов
/ 27 мая 2020

1 - Измените определение столбца Venue.pastshows следующим образом: pastshows = db.relationship('Show', back_populates='pastshows', lazy=True, primaryjoin="Show.venue_id==Venue.id")

2 - Измените определение столбца Artist.past_shows следующим образом: past_shows = db.relationship('Show', back_populates='past_shows', lazy=True, primaryjoin="Show.artist_id==Artist.id")

3- Попробуйте сделать такой запрос: artist = Artist.query.join(Show, Artist.id==Show.artist_id).filter(Artist.id==artist_id, Show.artist_id==artist_id)

...