pymysql-client_flag标识(解决同时执行多条语句)

背景:

最近测试数据需频繁修改数据库,而且是要开启事务多条语句执行的,所以封装一些脚本执行。

但是传入多条语句时会出现报错:
1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near…
检查了语句也没有语法错误,在网上查一下是由于pymysql默认是单条sql执行,同时传入多条会报错。

解决办法:

连接数据库时使用client_flag标识配置参数MULTI_STATEMENTS

首先看看chatgpt对client_flag参数的理解:
在使用 PyMySQL 进行连接 MySQL 数据库的时候,client_flag 是一个参数,它表示客户端标志。client_flag 是一个整数(类型为 int),它可以被设置为以下标志的位掩码:

  • CLIENT_LONG_PASSWORD:使用长密码认证协议。
  • CLIENT_FOUND_ROWS:将 FOUND_ROWS 标志发送到服务器,以便返回受最近执行的 SELECTINSERTUPDATEDELETE 语句影响的行数,而不是匹配行数。
  • CLIENT_LONG_FLAG:启用标志更多的标志。
  • CLIENT_CONNECT_WITH_DB:在连接 MySQL 服务器时自动选择一个默认数据库。
  • CLIENT_COMPRESS:启用压缩协议。
  • CLIENT_LOCAL_FILES:启用读取和写入本地文件的功能。
  • CLIENT_IGNORE_SPACE:忽略 SQL 语句中的空格和制表符。
  • CLIENT_SSL:使用 SSL 加密连接。
  • MULTI_STATEMENTS: 客户端允许发送多个语句(statements)到服务器执行。

使用的是这个参数 MULTI_STATEMENTS
具体来说,当使用execute()方法执行SQL语句时,如果语句中包含多个语句,如果没有设置client_flag.MULTI_STATEMENTS,则会报错。而如果设置了这个标志,PyMySQL就可以将它们作为一个整体发送到服务器执行,这在某些情况下会提高效率,但同时也会增加安全风险。如果你不确定是否需要使用这个标志,请慎重考虑。

代码示例:

import pymysql
from pymysql.constants import CLIENT

    def dml_mysql(self,sql):
        connect = pymysql.connect(
            host=mysql_conf['host'],  # mysql服务ip地址,若服务在本机则用localhost
            port=int(mysql_conf['port']),  # mysql服务端口
            user=mysql_conf['user'],  # 访问mysql的用户名
            password=mysql_conf['password'],  # 访问mysql的密码
            charset=mysql_conf['charset'],# 连接字符集
            client_flag=CLIENT.MULTI_STATEMENTS #开启allowMultiQueries=True 一次执行多条语句
        )
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值