解决python查询报%d format: a number is required, not str问题
文章链接:https://blog.csdn.net/u011878172/article/details/72599120
【问题描述】
1、在一条查询语句中,查询条件既包含了整形又包含了字符串型,执行查询函数后,直接报%d format: a number is required, not str
2、例如 ,如下sql 语句 sql = 'select productid from product where productid = %d and productName = %s'
【实例代码】
#coding=utf-8
import MySQLdb
def createConnection():
try:
conn = MySQLdb.connect('127.0.0.1', 'root', '000000', 'auto', charset='utf8')
except Exception as e:
print e
return conn
return conn
def select(sql, fieldValue):
conn = None
csor = None
result = None
try:
conn = createConnection()
csor = conn.cursor()
csor.execute(sql, fieldValue)
result = csor.fetchall()
return result
except Exception as e:
print e
finally:
closeDatabaseConnectionOrCursor(conn, csor)
return result
if __name__ == '__main__':
sql = 'select productid from product where productid = %d and productName = %s'
fieldValue = [int(28), '妈妈钱包']
result = select(sql, tuple(fieldValue))
执行完这一段代码后,系统会提示 %d format: a number is required, not str
【问题解决】
1、当调试到csor.execute(sql, fieldValue)语句时,选择跳入到,这是断点会进入到MySQLdb第三方模块的cursors.py文件的execute方法里,由于fieldValue参数为元组类型, 断点会进入到 query = query % tuple([db.literal(item) for item in args]),再次选择进入
2、这时断点会进入到MySQLdb第三方模块的connections.py的literal方法中,该方法只有一条语句(return self.escape(o, self.encoders)),在这条语句中断点选择进入
3、这时断点会进入到MySQLdb第三方模块的converts.py文件的Thing2Str方法,导致问题的原因也正是在该方法中,以下是Thing2Str的源码:
def Thing2Str(s, d):
"""Convert something into a string via str()."""
return str(s)
问题是由于代码把参数 s 都转换为了 str类型, 所以导致了把整形转换为了 str类型, 导致执行SQL语句时,系统提示数据类型不正确的错误
4、为了解决这个问题,只需要把Thing2Str方法里的源码修改为如下:
def Thing2Str(s, d):
"""Convert something into a string via str()."""
if type(s) == int:
return int(s)
return str(s)
既添加绿色的部分,就能解决这个问题
---------------------
作者:皮凯
来源:CSDN
原文:https://blog.csdn.net/u011878172/article/details/72599120
版权声明:本文为博主原创文章,转载请附上博文链接!
解决python查询报%d format: a number is required, not str问题的更多相关文章
- python中MySQL模块TypeError: %d format: a number is required, not str异常解决
转载自:http://www.codeif.com/topic/896 python代码: attr_sql = "INSERT INTO `ym_attribute` (`attr_nam ...
- %d format: a number is required, not str。
python代码: attr_sql = "INSERT INTO `ym_attribute` (`attr_name`, `type_id`, `attr_value`, `attr_s ...
- pymysql连接提示format: a number is required, not str
最近想随手写一个简单的员工管理系统,第一次使用python连接数据库,在这个过程中就遇到了一些问题,遂记录 遇到问题习惯性百度一下,很多教程都不适合新手,有些还不知道是不是瞎写的,所以我觉得有必要自己 ...
- 解决kylin查询报错:org.apache.kylin.rest.exception.InternalErrorException
报错信息: -- ::, ERROR [Query 12e9c054-760c---b1f06724c9b6-] service.QueryService: : Exception when exec ...
- python问题:TypeError: a bytes-like object is required, not 'str'
源程序: import socket target_host = "www.baidu.com" # 127.0.0.1 target_port = 80 # 建立一个socket ...
- 解决Python查询Mysql数据库信息乱码问题
今天尝试着用 Python 写了个脚本试着连接 mysql 数据库,并查询里边的数据,不过最终查询结果中文字符变成了ascii格式. 代码如下: #!/usr/bin/python #encoding ...
- 解决Python模块报错:ModuleNotFoundError: No module name 'StringIO'
下面是我在学习中遇到的问题,给大家分享一下: ''' 这里是测试代码 '''# coding = utf-8from selenium import webdriverfrom selenium. ...
- 解决Python查询Mysql中文乱码问题
前段时间,自己瞎动手用Django写了一个更新zip包和sql到远程服务器的工具.但Python从Mysql中读取出来的中文字符会乱码,如下图: 解决办法:Python连接Mysql时指定charse ...
- python 3.5: TypeError: a bytes-like object is required, not 'str'
出现该错误往往是通过open()函数打开文本文件时,使用了'rb'属性,如:fileHandle=open(filename,'rb'),则此时是通过二进制方式打开文件的,所以在后面处理时如果使用了s ...
随机推荐
- Windows下的命令神器Cmder
1. 下载地址: https://cmder.net/ 建议安装完整版本 2.设置与基本使用 1)将cmder添加到环境变量中PATH 2)添加到右键 Cmder.exe /REGISTER ALL ...
- Spark报错
1. Exception in thread "main" java.lang.OutOfMemoryError: Java heap space at com.mysql.jdb ...
- linux 上 mysql 的使用
1.登录mysql 第一次登录 没有密码 可以直接输入 mysql 有密码可以使用 mysql -u root -p 回车会提示需要输入密码 -u 用户名 -p 密码 这个mysql文件在/us ...
- Oracle左连接、右连接、全外连接、(+)号作用
在Oracle中,对于外连接, 也可以使用"(+) "来表示. 关于使用(+)的一些注意事项: 1.(+)操作符只能出现在where子句中,并且不能与outer join语法同时使 ...
- IFE第二天
HTML是超文本标记语言,HTML5是下一代的HTML标准. HTML元素是组成HTML文档的部分,HTML属性为HTML元素提供附加信息. 文档类型<!DOCTYPE>声明帮助浏览器正确 ...
- mysql的btree和hash的区别
Hash 索引结构的特殊性,其检索效率非常高,索引的检索可以一次定位,不像B-Tree 索引需要从根节点到枝节点,最后才能访问到页节点这样多次的IO访问,所以 Hash 索引的查询效率要远高于 B-T ...
- aop 幂等验证(二)
1 创建IIdempotent @Target({ElementType.PARAMETER, ElementType.METHOD}) @Retention(RetentionPolicy.RUNT ...
- 快速去水印(win10换图3D工具)
之前抠图都用ps啥的,后来发现win10自带的工具画图3D可以直接扣简单的图案,达到去水印的效果 1.将图片放入软件中 2.使用神奇选择工具,调整大小,框出图标 3.点击下一步,将没选上的或选多的进行 ...
- Python3 找不到库
import sys sys.path.append('/usr/local/lib64/python3.6/site-packages')sys.path.append('/usr/local/li ...
- CCF201812-3 CIDR合并
按题意模拟即可...主要CCF吞代码... #include<bits/stdc++.h> #define pb push_back #define mp make_pair #defin ...