如何在sqlalchemy查询中用替换组_,以便postgresql数据库不会引发错误

2024-10-02 04:21:03 发布

您现在位置:Python中文网/ 问答频道 /正文

在我尝试将我的应用程序部署到heroku之前,我的flask文件中有一个有效的查询。它工作的原因是我在本地使用sqlite3数据库,但在生产模式下必须使用postgresql数据库

我遇到但无法解决的问题是以下sqlalchemy查询:

companies = StaffMember.query.filter_by(user_id=current_user.id).group_by(StaffMember.company).all()

当我在postgresql中运行此命令时,会出现以下错误:

sqlalchemy.exc.ProgrammingError:(psycopg2.errors.GroupingError)列“staffMembers.id”必须出现在GROUP BY子句中,或在聚合函数中使用

从我发现的情况来看,问题在于group_by在postgresql中的工作方式不同,我应该尝试使用关键字'distinct'。但我真的不知道如何正确使用distinct来生成sqlalchemy中独一无二的公司列表

我尝试过如下方法:

companies = StaffMember.query.filter_by(user_id=current_user.id).distinct(StaffMember.company).all()

或:

companies = StaffMember.query.filter_by(user_id=current_user.id).filter_by(StaffMember.company).distinct()

我认为我没有正确创建查询

我试过阅读文档,但在我目前的编码水平下,我无法真正理解它们


Tags: id数据库bysqlalchemypostgresqlgroupcurrentall
1条回答
网友
1楼 · 发布于 2024-10-02 04:21:03

如果您试图在表中获得所有不同公司的列表,您可以执行以下操作:

companies = StaffMember.query.with_entities(
     StaffMember.company
).filter_by(
    user_id=current_user.id
).distinct()

或者:

companies = session.query(
     StaffMember.company
).filter_by(
    user_id=current_user.id
).distinct()

在这种情况下,使用GROUPBY或distinct将产生相同的结果。如果要使用group by,所有未聚合的选定列必须位于.group_by()

相关问题 更多 >

    热门问题