Python使用mysql库查询SQL数据库存在的值返回空列表问题
问题排查及修复方案
核心错误原因
- 变量传递错误:代码中提取的查询值存储在
code变量中,但调用query.execute()时传入的是teamCode变量,二者值不匹配,无法命中数据库中存在的记录。 - SQL占位符语法错误:参数化查询的
%s占位符不需要手动加单引号,MySQL驱动会自动处理字符串的引号包裹与转义,手动加单引号会导致最终执行的SQL出现两层引号,无法匹配真实值。 - 参数传递格式错误:
execute()方法的第二个参数要求是可迭代的序列类型,传递单个参数时需要构造为带尾逗号的元组(如(code,)),否则单个字符串会被按字符拆分为多个参数,导致查询逻辑异常。
修正后代码
code = data['code'] sql = "SELECT 200 FROM mytable WHERE mycolumn = %s;" query.execute(sql, (code,)) print(str(query.fetchall()))
通用排查技巧
后续遇到同类查询异常时,可打印实际执行的SQL校验逻辑是否符合预期:使用pymysql时可调用query.mogrify(sql, (code,)),使用MySQLdb时可读取query._last_executed属性,直接查看参数拼接后的完整SQL语句。
内容的提问来源于stack exchange,提问作者Jack
相关产品推荐
相关产品推荐

