flask_sqlalchemy TypeError on count () - PullRequest
0 голосов
/ 07 октября 2019

В базе данных chinook.sqlite две таблицы, приведенные ниже, связаны между собой.

исполнителей

  • ArtistId (PK)
  • Имя

альбомы

  • Идентификатор альбома (PK)
  • Название
  • Artistid (FK))

Я получаю метаданные в дБ, отраженные

app = Flask(__name__, instance_relative_config=True)
db = SQLAlchemy()
db.app = app
db.init_app(app)
db.Model.metadata.reflect(db.engine)

В моем model.py

from app import db

class Album(db.Model):
    __table__ = db.Model.metadata.tables['albums']
    artist = db.relationship('Artist' , backref = 'artists')

class Artist(db.Model):
    __table__ = db.Model.metadata.tables['artists']
    album = db.relationship('Album', backref = 'albums')

В представлении

{{artist.album.count ()}}

выдает ошибку, TypeError: count () принимает ровно один аргумент (задано 0)

Что я делаю не так?

1 Ответ

0 голосов
/ 07 октября 2019

Отношения ORM не были настроены для динамического , поэтому вместо Query.count() вы звоните list.count(). Используйте len():

{{ len(artist.albums) }}

Ваши определения модели также определяют дополнительные свойства отношений. Вместо backref, который является сокращением для создания нового свойства отношения на другом конце, используйте back_populates, чтобы связать две стороны вместе:

class Album(db.Model):
    __table__ = db.Model.metadata.tables['albums']
    artist = db.relationship('Artist', back_populates = 'albums')

class Artist(db.Model):
    __table__ = db.Model.metadata.tables['artists']
    albums = db.relationship('Album', back_populates = 'artist')
...