python3中连接mysql执行sql语句报错not enough arguments for format string

本文分析了一个Python使用pymysql库时遇到的错误:notenoughargumentsforformatstring。错误源于`execute()`方法中参数传递问题,可能是未传入必要的args参数或者传入了空的args如`[]`。解决方法包括移除args参数、将args设为None,或者在SQL中正确使用百分号占位符。作者分享了个人代码中的问题及解决策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、错误:

  File "/usr/local/python3/lib/python3.8/site-packages/pymysql/cursors.py", line 125, in mogrify
    query = query % self._escape_args(args, conn)
TypeError: not enough arguments for format string

二、错误分析: not enough arguments for format string  参数不足。 

查看 execute()  源码

1、 由下图可知报错信息是在  mogrify() 方法args这个不是空导致的

2、结合 TypeError: not enough arguments for format string 参数不足,可以得出 本应该传

args这个参数但是没有传导致的,或者是不应该传 args这个参数 但是传一个不等于None的空参数

比如 [], "", '' 等等这些

3、定位问题排查代码

三、解决办法

查看自己代码如下

我这问题是args没有参数,而我默认传的是 [] 导致 

1、 可以直接把args=[] 去掉 

2、args=[]  改成 args=None

3、sql语句中使用 " % " 这个参数的占位符,如果sql本身就有% 则替换成 "%%" 


原创不易,转载需标明出处,谢谢。

Traceback (most recent call last): File "/Users/edy/PycharmProjects/PythonProject2/1.py", line 47, in <module> fetch_and_store(api_url, database_path) File "/Users/edy/PycharmProjects/PythonProject2/1.py", line 42, in fetch_and_store cursor.executemany(insert_sql, json_data) File "/Users/edy/PycharmProjects/PythonProject2/.venv/lib/python3.12/site-packages/pymysql/cursors.py", line 182, in executemany return self._do_execute_many( ^^^^^^^^^^^^^^^^^^^^^^ File "/Users/edy/PycharmProjects/PythonProject2/.venv/lib/python3.12/site-packages/pymysql/cursors.py", line 205, in _do_execute_many v = values % escape(next(args), conn) ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~ TypeError: not enough arguments for format stringimport json import pymysql import requests import sqlite3 from flask import Flask, render_template_string from typing import List, Dict app = Flask(__name__) def fetch_and_store(url: str, db_path: str) -> None: # 1. 发起HTTP请求获取数据 response = requests.get(url, timeout=10) response.raise_for_status() # 自动处理HTTP错误 # 2. 解析JSON到Python列表 json_data: List[Dict] = response.json() # 3. 准备数据库连接 # 数据库连接配置 DB_CONFIG = { &#39;host&#39;: &#39;localhost&#39;, # 数据库地址 &#39;user&#39;: &#39;root&#39;, # 用户名 &#39;password&#39;: &#39;11111111&#39;, # 密码 &#39;database&#39;: &#39;python&#39;, # 数据库名 &#39;port&#39;: 3306, # 端口 &#39;charset&#39;: &#39;utf8mb4&#39; # 字符集 } connection = pymysql.connect(**DB_CONFIG) insert_sql = &#39;&#39;&#39; INSERT INTO container_info ( customer_id, node_info, image_id, container_id, container_create_time, container_start_time, container_run_status, container_restart_count ) VALUES (%s, %s, %s, %s, %s, %s, %s, %s) &#39;&#39;&#39; for i in range(0,len(json_data)) : with connection.cursor() as cursor: cursor.executemany(insert_sql, json_data) # 使用示例 if __name__ == "__main__": api_url = "http://192.168.40.242/get_field" # 替换实际地址 database_path = "server_data.db" fetch_and_store(api_url, database_path)
03-10
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值