文章链接: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问题的更多相关文章

  1. 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 ...

  2. %d format: a number is required, not str。

    python代码: attr_sql = "INSERT INTO `ym_attribute` (`attr_name`, `type_id`, `attr_value`, `attr_s ...

  3. pymysql连接提示format: a number is required, not str

    最近想随手写一个简单的员工管理系统,第一次使用python连接数据库,在这个过程中就遇到了一些问题,遂记录 遇到问题习惯性百度一下,很多教程都不适合新手,有些还不知道是不是瞎写的,所以我觉得有必要自己 ...

  4. 解决kylin查询报错:org.apache.kylin.rest.exception.InternalErrorException

    报错信息: -- ::, ERROR [Query 12e9c054-760c---b1f06724c9b6-] service.QueryService: : Exception when exec ...

  5. 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 ...

  6. 解决Python查询Mysql数据库信息乱码问题

    今天尝试着用 Python 写了个脚本试着连接 mysql 数据库,并查询里边的数据,不过最终查询结果中文字符变成了ascii格式. 代码如下: #!/usr/bin/python #encoding ...

  7. 解决Python模块报错:ModuleNotFoundError: No module name 'StringIO'

    下面是我在学习中遇到的问题,给大家分享一下:   ''' 这里是测试代码 '''# coding = utf-8from selenium import webdriverfrom selenium. ...

  8. 解决Python查询Mysql中文乱码问题

    前段时间,自己瞎动手用Django写了一个更新zip包和sql到远程服务器的工具.但Python从Mysql中读取出来的中文字符会乱码,如下图: 解决办法:Python连接Mysql时指定charse ...

  9. python 3.5: TypeError: a bytes-like object is required, not 'str'

    出现该错误往往是通过open()函数打开文本文件时,使用了'rb'属性,如:fileHandle=open(filename,'rb'),则此时是通过二进制方式打开文件的,所以在后面处理时如果使用了s ...

随机推荐

  1. js检查身份证号是否正确

    转的,比较完善的验证身份证号的代码 /* check(ID)验证身份证号码 返回值:0 : "是正确的身份证号" 1 : "身份证校验不符合求和模11=1这个等式&quo ...

  2. Linux切换为超级用户的命令

    问题描述 使用vi编辑器写好内容后保存并退出时遇到以下问题 解决方案 该问题的原因是用户权限不够,因为普通用户用 vi 不能保存文件,需要使用超级用户才可以. 先转换为超级用户:su 再用vi打开文件 ...

  3. Java 多线程加锁的方式总结及对比(转载)

    转自https://blog.csdn.net/u010842515/article/details/67634813 参考博文:http://www.cnblogs.com/handsomeye/p ...

  4. python操作随笔

    # -*- encoding: utf-8 -*-import urllib2from bs4 import BeautifulSoupimport re f1 = open('E:/1.txt')l ...

  5. python3中的 zip()函数 和python2中的 zip()函数 的区别

    python3中的 zip()函数 和python2中的 zip()函数 的区别: 描述: zip() 函数用于将可迭代对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象. ...

  6. ajax基本原理与案例

    一.什么是Ajax AJAX即“Asynchronous Javascript And XML”( 异步 JavaScript和XML),AJAX不是一种新的编程语言,而是一种用于创建更好更快以及交互 ...

  7. 自动化测试(web测试selenium框架)

    什么是selenium? 一个用于Web应用程序测试的工具直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safa ...

  8. 调试ucosii_pendsv中断函数有感

    发现自己的代码的意思和自己理解的意思有不相同的时候,自己先用printf打印输出分析 当发现是自己那一个知识点没有掌握好时,自己用其他的C编译器,仿写用到的知识点的程序,然后掌握该知识点. 最后实在找 ...

  9. 【简】题解 AWSL090429 【市场】

    因为这有个时间的限制 并且  求的时间都是前缀和 那么 我们可以根据时间将排序 因为题中没有修改可以直接用背包预处理出答案 但是因为题目ci mi<=1e9   vi<=300 所以发现不 ...

  10. 牛客小白月赛13-J小A的数学题 (莫比乌斯反演)

    链接:https://ac.nowcoder.com/acm/contest/549/J来源:牛客网 题目描述 小A最近开始研究数论题了,这一次他随手写出来一个式子,∑ni=1∑mj=1gcd(i,j ...