flask使用sqlalchemy进行group_by出现的一些mysql的sql_mode错误

今天使用了flask-sqlalchemy进行分组时发现错误

messages = Message.query.filter_by(message_getter=user_id).order_by(Message.create_time.desc()).group_by(Message.message_sender).all()

发现报错
mysql-group-by-error

pymysql.err.InternalError: 

(1055, "Expression #1 of SELECT list is not in GROUP BY clause 
and contains nonaggregated column 'guoer.message.id' which is not functionally dependent on columns in GROUP BY clause;

this is incompatible with sql_mode=only_full_group_by")

重点在这句话
sql_mode=only_full_group_by

意思是当前数据库的
MySQL5.7版本默认设置了
mysqlsql_mode=only_full_group_by属性

原因:
sql_mode=only_full_group_by属性

对于 GROUP BY 聚合操作,如果 SELECT中 的列,没有在 GROUP BY 中出现,那么将认为这个 SQL 是不合法的

select 选取分组中的列+聚合函数 from 表名称 group by 分组的列
从语法格式来看,是先有分组,再确定检索的列,检索的列只能在参加分组的列中选。

所以解决方法就是可以去设置取消这个属性

Ubuntu下:

修改/etc/mysql/mysql.conf.d/mysqld.cnf文件

在[mysql]下方加入

sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

mysql-config-group-by

添加完成后,重新启动MySQL服务,MySQL报错消失。

✍ 常用命令

systemctl restart mysql.service #重启
systemctl stop mysql.service # 停止
systemctl start mysql.service # 运行
systemctl status mysql.service # 状态

关于我

欢迎来赞我的GitHub
Hi菜鸡-个人主页

猜你喜欢

转载自blog.csdn.net/Jake_Lam/article/details/109272979