- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试将SQLAlchemy的group_by()
函数与mysql+mysqlconnector
引擎一起使用:
rows = session.query(MyModel) \
.order_by(MyModel.published_date.desc()) \
.group_by(MyModel.category_id) \
.all()
它在 SQLite 上运行良好,但对于 MySQL 我收到此错误:
[42000][1055] Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column '...' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
我知道how to solve it in plain SQL ,但我想利用 SQLAlchemy 的优势。
SQLAlchemy 的正确解决方案是什么?
提前致谢
最佳答案
形成 greatest-n-per-group 的一种方法具有明确定义行为的查询将使用 LEFT JOIN
,为每个 category_id
查找 MyModel
行,这些行没有具有更大 的匹配行发布日期
:
my_model_alias = aliased(MyModel)
rows = session.query(MyModel).\
outerjoin(my_model_alias,
and_(my_model_alias.category_id == MyModel.category_id,
my_model_alias.published_date > MyModel.published_date)).\
filter(my_model_alias.id == None).\
all()
这适用于任何 SQL DBMS。在 SQLite 3.25.0 和 MySQL 8(以及许多其他版本)中,您可以使用窗口函数来实现相同的目的:
sq = session.query(
MyModel,
func.row_number().
over(partition_by=MyModel.category_id,
order_by=MyModel.published_date.desc()).label('rn')).\
subquery()
my_model_alias = aliased(MyModel, sq)
rows = session.query(my_model_alias).\
filter(sq.c.rn == 1).\
all()
当然,如果您在联接中使用结果,您也可以使用GROUP BY
:
max_pub_dates = session.query(
MyModel.category_id,
func.max(MyModel.published_date).label('published_date')).\
group_by(MyModel.category_id).\
subquery()
rows = session.query(MyModel).\
join(max_pub_dates,
and_(max_pub_dates.category_id == MyModel.category_id,
max_pub_dates.published_date == MyModel.published_date)).\
all()
关于python - SQLAlchemy:如何正确使用group_by()(only_full_group_by)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58620448/
在查询中发现 sql_mode=only_full_group_by 错误。我尝试了很多方法来修复它。更改了 sql_mode=''。但我仍然收到此错误。 PDOException: SQLSTATE
我不小心启用了 ONLY_FULL_GROUP_BY 模式,如下所示: SET sql_mode = 'ONLY_FULL_GROUP_BY'; 如何禁用它? 最佳答案 解决方案 1:从 mysql
这个问题已经有答案了: Error related to only_full_group_by when executing a query in MySql (18 个回答) 已关闭 5 年前。 我
数据库错误错误:SQLSTATE[42000]:语法错误或访问冲突:1055 SELECT 列表的表达式 #27 不在 GROUP BY 子句中,并且包含非聚合列“erp.CFPG.id”,该列在功能
请帮助我纠正 SQL 语法: SELECT DISTINCT kodemk, a.namamk, a.sks, IF( b.status='K', 0, a.smt ) as smt, a.k
我试图让下面的语句与 mysql v5.7.5 一起工作,尽管我真的完全不理解错误消息中的措辞,而且文档也没有帮助我。 有问题的 SQL 语句: SELECT YEARWEEK
我有一个带有 MySQL 服务器版本 5.7.27 的新 VPS 服务器。在这个新的 VPS 中,我上传了一个数据库和一些代码,这些代码是我从以前的服务器上获得的,该服务器具有较旧的 MySQL 服务
我在 MySQL 5.7.14 上遇到 ONLY_FULL_GROUP_BY 问题,即使我设置了 SQL 模式,我似乎也无法禁用它。 我已通过运行此命令将 @@sql_mode 设置为删除 ONLY_
我使用 mysqldump 并得到错误。在我的配置文件中,为 sql_mode 写入了属性,在 mysql 控制台全局和 session 属性中也类似。 [mysqld] sql_mode=IGNOR
我更新了 mysql,我从 MySQL 版本 5.6.17 升级到版本 5.7.14 因为我的 sql 查询有错误 的确,我的很多查询都是这样的: SELECT count (id) as nbr,
我不小心启用了这样的 ONLY_FULL_GROUP_BY 模式: SET sql_mode = 'ONLY_FULL_GROUP_BY'; 如何禁用它? 最佳答案 解决方案 1:从 mysql 控制
我正在将一些旧的 SS 2.4 代码升级到 SS4。执行以下查询时出现以下错误: 错误: Expression #1 of SELECT list is not in GROUP BY clause
我在数据库 mysql (5.7.21) 中有一个表,如下所示: +----------+--------------+-----------+-----------+| id_price | id_
版本:Plesk Onyx v17.8.11_build1708180301.19操作系统:Ubuntu 16.04.4 LTS 在我的日志中出现此错误: AH01071: Got error 'PH
我想要获取“订单”表中但不在“客户”表中的客户。 “快速订购”客户。我写了这个查询: SELECT `email`, `firstname` , `lastname`, `telephone`, `i
我有以下查询: SELECT f.flight_number, f.flight_date, f.airport, a.iata, a.iso3166 AS airport_country_code,
我有这个数据 1 => blue, 2 => red, 3 => red 我想要的是: [1, 2] 禁用 MySql 严格模式,或更具体地说,禁用 ONLY_FULL_GROUP_BY - 我可以做
我正在运行这个 SQL 语句: SELECT *, GROUP_CONCAT(contact) AS contact FROM table4, table3, table2, tab
我尝试将SQLAlchemy的group_by()函数与mysql+mysqlconnector引擎一起使用: rows = session.query(MyModel) \ .ord
SELECT DISTINCT `A/C#` AS `A/C#`, `MyRef` AS `MyRef`, DATEDIFF('2017-06-30', `Date`) AS
我是一名优秀的程序员,十分优秀!