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菜鸡-个人主页

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。