【问题标题】:flask_sqlalchemy TypeError on count()计数上的 flask_sqlalchemy 类型错误()
【发布时间】:2019-10-07 19:12:25
【问题描述】:

在chinook.sqlite db中,下面两个表是相关的。

艺术家

  • 艺术家 ID(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')

在视图中,

{{ 艺术家.album.count() }}

给出错误, TypeError: count() 只接受一个参数(给定 0)

我做错了什么?

【问题讨论】:

  • Query.all() 返回一个list,所以...all().count() 只会导致同样的异常。

标签: python flask sqlalchemy flask-sqlalchemy


【解决方案1】:

ORM 关系不是configured to be dynamic,因此您调用的是list.count(),而不是Query.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')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-03
    • 1970-01-01
    • 2023-02-03
    • 1970-01-01
    相关资源
    最近更新 更多