项目场景:
python mysql 数据库:pymysql 报错 TypeError: not enough arguments for format string
python链接mysql数据库 select 或 insert 或 update。
问题描述
python 与 mysql %号使用冲突问题
,报错 TypeError: not enough arguments for format string
例如:执行一个 insert select 带 % 会报错参数不足:
usesql = """insert into dbname.inserttable(rk, bbb)
select 'aaa' rk,case when cusname like '%集团%' then 1 else 0 end bbb from dbname.testtable t"""
import pymysql
# 创建连接
conn = pymysql.connect(host="127.0.0.1", port=3306, user='zff', passwd='zff123', db='zff', charset='utf8mb4')
# 创建游标(查询数据返回为元组格式)
# cursor = conn.cursor()
# 执行SQL,返回受影响的行数
effect_row1 = cursor.execute(usesql)
# 增/删/改均需要进行commit提交,进行保存
conn.commit()
# 关闭游标
cursor.close()
# 关闭连接
conn.close()
原因分析:
python中%用于传参,此处sql中并无sql所以报错:
python中%用于传参,此处sql中并无sql所以报错
解决方案:
将%替换为%%:
例如:usesql = “”“insert into dbname.inserttable(rk, bbb)
select ‘aaa’ rk,case when cusname like ‘%%集团%%’ then 1 else 0 end bbb from dbname.testtable t”“”
另外,单独执行 select ‘aaa’ rk,case when cusname like ‘%集团%’ then 1 else 0 end bbb from dbname.testtable 不会报错。
总结:
pymysql insert …select…% .会报错参数不足,需%%(两个百分号),即 insert 如含义% 需使用%%;select …%.不会报错,不需要改为%%。