首页 > 数据库 >Python-PyMySQL的一些使用注意事项

Python-PyMySQL的一些使用注意事项

时间:2023-08-24 10:56:52浏览次数:47  
标签:语句 group Python sql PyMySQL role user 注意事项 id

一、关于group by的使用

在部分mysql版本(5.7.xx及以上)中,若select的列中,包含了未被group by的字段,会报以下错误:

[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'xxxx' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

错误原因是mysql这个版本之后的mysql默认开启了only_full_group_by模式。

有以下几个解决思路:

1、若无法修改sql_mode(大部分情况下,公司与客户不会允许修改),可选择以下方案:
		修改SQL语句,在group by子句中将需要select的列都写上。(此方法需要注意,group by子句都加上select的列后,执行结果是否一致,大概率是不一致,查询结果会多分很多组,不推荐)
		
		通过拆分成多个查询语句,如需要group by的语句单独一行,再写一个新语句进行后续查询
		
2、修改sql_mode(方法很多,改配置文件或者直接在mysql中设置均可,百度操作步骤)

二、在原生sql语句中,将某些变量放入执行语句中

# 查询某段时间内的一些数据
start_time = '2021-09-01 00:00:00.000'
end_time = '2022-09-25 23:59:59.999'

cursor.execute(
        "SELECT b.username,COUNT(*),b.userid FROM review a LEFT JOIN users b ON a.creater_id = b.userid \
            WHERE a.create_time BETWEEN %s AND %s GROUP BY b.userid,b.username ORDER BY COUNT(*) \
                DESC;", (start_time, end_time))

三、在原生sql语句中,使用in时

# 查询某些数据,user_id IN 某个列表
user_id_list = [1,2,3]

sql_str = "SELECT DISTINCT u.user_id,r.role_name FROM user_role_con u LEFT JOIN \
                role r ON u.role_id = r.role_id WHERE u.user_id IN %s;"

# 把该列表拼成一个元素,作为参数传入即可
cursor.execute(sql_str, (user_id_list,))
user_role_name = cursor.fetchall()

标签:语句,group,Python,sql,PyMySQL,role,user,注意事项,id
From: https://www.cnblogs.com/chiyun/p/17653609.html

相关文章

  • Python Web:Django、Flask和FastAPI框架对比
    Django、Flask和FastAPI是PythonWeb框架中的三个主要代表。这些框架都有着各自的优点和缺点,适合不同类型和规模的应用程序。Django:Django是一个全功能的Web框架,它提供了很多内置的应用程序和工具,使得开发Web应用程序更加容易。Django采用了MTV(模型-模板-视图)设计模式,提供ORM......
  • Python-大文件上传requests-toolbelt
    一、简介requests.post发送文件的方式是把所有文件读取内存中,再构建请求发送出去。当发送大文件时候(好几个G)就会导致内存不足OOM默认使用的requests.post较难做到分段文件发送(大概思路:先计算原文件md5,再切分文件发送,到接收端组合再计算md5,较麻烦不推荐,可参考:Python之requests模......
  • Python-保存request请求为各种文件
    文件下载相关工具importjsonimportrequestsclassCustomFileTools(object):defdownload_json_file(self,json_url,save_path):"""下载json文件并保存"""json_req=requests.get(json_url)ifjso......
  • python中的 “__name__”属性
       在python中,每个脚本文件都会有自己的__name__属性。在单独运行一个脚本时,name属性会被赋值为__main__,这并不是说当前脚本名字叫main,这个值表示当前脚本是主函数。      如果现在有一个test1脚本和test2脚本。单独运行test1脚本时,这个属性就会被赋......
  • Python-Flask配置https证书
    零、问题错误:SSLVersion2and3ProtocolDetection一、说明1、通过使用flask框架配置https证书进行HTTPs证书配置后会被扫描到漏洞,漏洞描述如下:远程服务接受使用SSL2.0和/或SSL3.0加密的连接。这些版本的SSL受到多个加密缺陷的影响,包括:-带CBCCiphers的不安全的填充方案。......
  • 《流畅的python》— 列表推导与生成器表达式
    列表推导是构建列表(list)的快捷方式,而生成器表达式则可以用来创建其他任何类型的序列。如果你的代码里并不经常使用它们,那么很可能你错过了许多写出可读性更好且更高效的代码的机会。很多Python程序员都把列表推导(listcomprehension)简称为listcomps,生成器表达式(generatorexpre......
  • python-flask小结
    1.flask和django区别1.flask是一个轻量级的,django是一个重量级的,包含了很多组件,包括admin,orm等,flask虽然没有但可以引入第三方组件。2.flask是基于上下文管理做的一个应用上下文appcontext和请求上下文requestcontext管理。django只是通过参数传递。2.flask生命周期......
  • python rasa聊天机器人教程六:服务器部署
    1.准备环境:宝塔+nginx+docker首先在服务器上安装好宝塔,然后在宝塔里面安装nginx+docker2.创建站点宝塔站点里面创建一个站点 3.上传rasa项目的代码到站点目录把之前在本地运行正常的rasa项目代码上传到服务器站点目录上4.修改index.html代码修改站点目录下/www/wwwroo......
  • python - 文件md5校验
    通过md5校验文件,我们可以判断文件内容是否改变,用python实现代码如下importhashlib#1.txt为空文本withopen('1.txt','rb')asf:data=f.read()md5Old=hashlib.md5(data).hexdigest()print(md5Old)#d41d8cd98f00b204e9800998ecf8427e#1.txt内容为12......
  • Python基础
    python学习后缀.py纯Python文件.ipynbJupyterNotebook文件的扩展名,代表IpythonNotebook.pyi类型提示文件,提供代码静态类型信息,帮助开发人员进行类型检查和静态分析命名和对应py文件相同,以便编译器将二者进行关联.pycPython字节码文件的扩展名,存储已编......