今天使用了flask-sqlalchemy進行分組時發(fā)現(xiàn)錯誤
messages = Message.query.filter_by(message_getter=user_id).order_by(Message.create_time.desc()).group_by(Message.message_sender).all()
發(fā)現(xiàn)報錯
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
意思是當前數(shù)據(jù)庫的
MySQL5.7版本默認設置了
mysqlsql_mode=only_full_group_by
屬性
原因:
sql_mode=only_full_group_by屬性
對于 GROUP BY 聚合操作骤肛,如果 SELECT中 的列碳抄,沒有在 GROUP BY 中出現(xiàn)隅茎,那么將認為這個 SQL 是不合法的
select 選取分組中的列+聚合函數(shù) 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服務,MySQL報錯消失过椎。
? 常用命令
systemctl restart mysql.service #重啟
systemctl stop mysql.service # 停止
systemctl start mysql.service # 運行
systemctl status mysql.service # 狀態(tài)