将为 sqlite 编写的 sqlalchemy 查询转换为 postgres

Posted

技术标签:

【中文标题】将为 sqlite 编写的 sqlalchemy 查询转换为 postgres【英文标题】:convert sqlalchemy query written for sqlite to postgres 【发布时间】:2022-01-10 06:07:39 【问题描述】:

使用 sqlite 制作的 Flask 应用程序现在转换为 postgres。我有以下查询来收集多家商店的每日销售额。然后将销售额放入一个列表中以在 chartjs 图表中使用。

    daily_chart = (
        db.session.query(Sales, func.sum(Sales.sales).label("total_sales"))
        .filter(Sales.date >= start_week, Sales.date <= end_week)
        .group_by(Sales.date)
        .order_by(Sales.date)
    )
    values1 = []
    for v in daily_chart:
        values1.append(v.total_sales)

我收到以下错误。

(psycopg2.errors.GroupingError) column "Sales.id" must appear in the GROUP BY clause or be used in an aggregate function

我尝试使用 with_entities 但并不真正了解 sql,也找不到适用于 func 语句的答案。

【问题讨论】:

【参考方案1】:

尝试从query 语句中删除Sales

【讨论】:

我刚刚在查询中将 Sales 更改为 Sales.date 并且它起作用了。 是的。我认为在那里有销售是试图带来如果你不按 id 分组的话你不能带来的 id。 在 SQL 中,您可以看到这种行为,请参阅这个 DBFIDDLE:dbfiddle.uk/…

以上是关于将为 sqlite 编写的 sqlalchemy 查询转换为 postgres的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 sqlalchemy 编写自己的聚合函数?

Python3+SQLAlchemy+Sqlite3实现ORM教程

SQLAlchemy:pool_size 和 SQLite

SQLAlchemy 选择在 SQLite 表上给出不同的结果,原始 sql 与可选

使用 SQLAlchemy、SQLite 和 Postgresql 架构限定表?

Scrapy - SQLite 中未创建 SQLalchemy 外键