解决python查询报%d format: a number is required, not str问题
2017-05-21 17:03
399 查看
【问题描述】
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的源码:
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)
既添加绿色的部分,就能解决这个问题
相关文章推荐
- MySQLdb TypeError: %d format: a number is required, not str问题解决
- python中MySQL模块TypeError: %d format: a number is required, not str异常解决
- python mysql插入数据报错:TypeError: %d format: a number is required, not str
- pymysql cursor传参报错TypeError: %d format: a number is required, not str
- %d format: a number is required, not str。
- %d format: a number is required, not str。
- 【Python】安装python包时遇到"error: Microsoft Visual C++ 9.0 is required"问题的解决方法
- 解决configure: error: bzlib.h is required的问题
- 解决configure: error: bzlib.h is required的问题
- 关于“The type *** is not accessible due to restriction on required library”问题的解决
- 转:python 3.4 error: Microsoft Visual C++ 10.0 is required(Unable to find vcvarsall.bat)解决办法,自研亲测可行
- 解决configure: error: bzlib.h is required的问题
- Python Version 2.7 required which was not found in the registry 问题解决
- 使用ROW_NUMBER 和partition by 解决报表中的查询问题
- Python Version 2.7 required which was not found in the registry 问题解决
- 解决mysql中表字符集gbk,列字符集Latin1,python查询乱码问题
- (转)Python Version 2.7 required which was not found in the registry 问题解决
- According to TLD, tag fmt:formatDate must be empty, but is not 问题的解决
- 关于“The type **** is not accessible due to restriction on required library”问题的解决
- 在新浪sae下部署python程序数据库配置问题 an integer is required