sqlalchemy.exc.ProgrammingError 烧瓶
sqlalchemy.exc.ProgrammingError for flask
我有一个带有 postgresql 的 flask 应用程序,我想根据用户最好的朋友的名字对用户进行排序。为了解释它在 bestfriend 中具有一对一关系的数据库,我使用 flask-migrate 并且 Alembic.But 得到了这个错误,如果你能告诉我我该如何解决它以及问题出在哪里?
error
sqlalchemy.exc.ProgrammingError
ProgrammingError: (ProgrammingError) column "users_1.name" must appear
in the GROUP BY clause or be used in an aggregate function LINE 2:
FROM users JOIN (SELECT users.name AS name, users_1.name AS
... ^ 'SELECT users.id AS users_id, users.name AS users_name,
users.age AS users_age, users.email AS users_email,
users.bestfriend_id AS users_bestfriend_id \nFROM users JOIN (SELECT
users.name AS name, users_1.name AS fn \nFROM users JOIN users AS
users_1 ON users_1.id = users.bestfriend_id GROUP BY users.name) AS
anon_1 ON anon_1.name = users.name ORDER BY anon_1.fn ASC \n LIMIT
%(param_1)s OFFSET %(param_2)s' {'param_1': 2, 'param_2': 0}
model.py:
friends = db.Table('friends',
db.Column('user_id', db.Integer, db.ForeignKey('users.id')),
db.Column('friend_id', db.Integer, db.ForeignKey('users.id'))
)
class Users(db.Model):
id = db.Column(db.Integer, primary_key = True)
name = db.Column(db.String(50), index=True)
age= db.Column(db.Integer )
email = db.Column(db.String(50),index=True, unique= True)
bestfriend_id = db.Column(db.Integer, db.ForeignKey('users.id', ondelete ='SET NULL'), nullable=True)
is_bestfriend = db.relationship( 'Users', uselist=False, remote_side=[id], post_update=True)
view.py
#condition to sort base on bestfriend name
elif request.args.get('sort') == 'bf':
sortBy = 'bf'
friend = db.aliased(Users)
sub = db.session.query(
Users.name, friend.name.label('fn')).\
join(friend, Users.is_bestfriend).group_by(Users.name).subquery()
monkey = Users.query.join(sub, sub.c.name == Users.name).\
order_by(sub.c.fn.asc()).paginate(page, MONKEYS_PAGE, False)
您忘记将 friend.name.label('fn') 添加到群组
join(friend, Users.is_bestfriend).group_by(Users.name).group_by('fn').subquery()
我有一个带有 postgresql 的 flask 应用程序,我想根据用户最好的朋友的名字对用户进行排序。为了解释它在 bestfriend 中具有一对一关系的数据库,我使用 flask-migrate 并且 Alembic.But 得到了这个错误,如果你能告诉我我该如何解决它以及问题出在哪里?
error
sqlalchemy.exc.ProgrammingError
ProgrammingError: (ProgrammingError) column "users_1.name" must appear in the GROUP BY clause or be used in an aggregate function LINE 2: FROM users JOIN (SELECT users.name AS name, users_1.name AS
... ^ 'SELECT users.id AS users_id, users.name AS users_name, users.age AS users_age, users.email AS users_email, users.bestfriend_id AS users_bestfriend_id \nFROM users JOIN (SELECT users.name AS name, users_1.name AS fn \nFROM users JOIN users AS users_1 ON users_1.id = users.bestfriend_id GROUP BY users.name) AS anon_1 ON anon_1.name = users.name ORDER BY anon_1.fn ASC \n LIMIT %(param_1)s OFFSET %(param_2)s' {'param_1': 2, 'param_2': 0}
model.py:
friends = db.Table('friends',
db.Column('user_id', db.Integer, db.ForeignKey('users.id')),
db.Column('friend_id', db.Integer, db.ForeignKey('users.id'))
)
class Users(db.Model):
id = db.Column(db.Integer, primary_key = True)
name = db.Column(db.String(50), index=True)
age= db.Column(db.Integer )
email = db.Column(db.String(50),index=True, unique= True)
bestfriend_id = db.Column(db.Integer, db.ForeignKey('users.id', ondelete ='SET NULL'), nullable=True)
is_bestfriend = db.relationship( 'Users', uselist=False, remote_side=[id], post_update=True)
view.py
#condition to sort base on bestfriend name
elif request.args.get('sort') == 'bf':
sortBy = 'bf'
friend = db.aliased(Users)
sub = db.session.query(
Users.name, friend.name.label('fn')).\
join(friend, Users.is_bestfriend).group_by(Users.name).subquery()
monkey = Users.query.join(sub, sub.c.name == Users.name).\
order_by(sub.c.fn.asc()).paginate(page, MONKEYS_PAGE, False)
您忘记将 friend.name.label('fn') 添加到群组
join(friend, Users.is_bestfriend).group_by(Users.name).group_by('fn').subquery()