【发布时间】:2014-08-25 06:09:44
【问题描述】:
我正在使用 Flask-SQLAlchemy 来查询我的 Postgres 数据库。
我目前正在尝试使用以下查询来查询标题建议:
res = Title.query.filter(Titles.name.ilike(searchstring)).limit(20)
到目前为止一切顺利。
现在我想按每个 Title 对象的“订阅者”数量对结果进行排序。
我知道以下 SO 问题:SQLAlchemy ordering by count on a many to many relationship 但是它的解决方案对我不起作用。
我收到以下错误:
ProgrammingError: (ProgrammingError) column "publishers_1.id" must appear in the GROUP BY clause or be used in an aggregate function
LINE 1: ...itles_name, count(titles_users.user_id) AS total, publishers...
(Publisher 与 Title 模型是一对多的关系)
我知道答案与子查询有关
下面是我的两个模型的简化示例。
# Many-to-Many relationship for user and titles
titles_users = db.Table('titles_users',
db.Column('user_id', db.Integer, db.ForeignKey('users.id')),
db.Column('title_id', db.Integer, db.ForeignKey('titles.id'))
)
class User(db.Model, UserMixin):
__tablename__ = 'users'
# ids
id = db.Column(db.Integer, primary_key=True)
# Attributes
email = db.Column(db.String(255), unique=True)
full_name = db.Column(db.String(255))
pull_list = db.relationship(
'Title',
secondary=titles_users,
backref=db.backref('users', lazy='dynamic'),
lazy='joined'
)
class Title(db.Model):
__tablename__ = 'titles'
#: IDs
id = db.Column(db.Integer(), primary_key=True)
#: Attributes
name = db.Column(db.String(255))
【问题讨论】:
-
您能告诉我们为什么链接的 SO 问题中的解决方案对您不起作用吗?你有什么错误吗?
-
我已经用我收到的错误更新了帖子。
标签: python postgresql flask sqlalchemy flask-sqlalchemy