解决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 ...
随机推荐
- JasperReports® Library | Jaspersoft Community
JasperReport报表导出踩坑实录 - 小卖铺的老爷爷 - 博客园https://www.cnblogs.com/laoyeye/p/7707149.html jasperreport_百度百科 ...
- 面试题(转载csdn)
转自https://blog.csdn.net/linzhiqiang0316/article/details/80473906 相关概念 面向对象的三个特征 封装,继承,多态,这个应该是人人皆知,有 ...
- WebSocket原理
一 . WebSocket原理 1.1.背景 WebSocket 是基于Http 协议的改进,Http 为无状态协议,基于短连接,需要频繁的发起请求,第二 Http 只能客户端发起请求,服务端无法主动 ...
- git 远程新建分支后,本地查看不到
使用以下命令同步 git remote # 列出所有远程主机git remote update origin --prune # 更新远程主机origin 整理分支git branch -r # 列出 ...
- linux makefile中一些复制运算的区别
Makefile 中 :=. ?= .+= .=的区别 = 是最基本的赋值:= 是覆盖之前的值?= 是如果没有被赋值过就赋予等号后面的值,如果已经被赋值则就用之前的赋值+= 是添加等号后面的值
- git在windows及linux环境下安装及常用命令
git在windows下安装 下载地址:https://git-scm.com/ 默认安装即可 验证 git --version git在linux下安装 下载地址:https://mirrors.e ...
- App自动化(1)--Appium-Android环境搭建
本次笔记记录Appium-Android环境搭建,主要实现在windows上通过python编写脚本来实现模拟器上安装的app自动化测试. 主要步骤:安装node.js,配置JDK环境,配置Andro ...
- crontab语法
* * * * * command minute hour day month week ...
- (六)QDialog,QMessageBox,QFileDialog,QColorDialog颜色,QFontDialog字体
QDialog 对话框: 1.模态对话框: QDialog dlg(this); // 显示模态对话框 exec ,后面的不可操作 dlg.exec(); // 阻塞 2.非模态对话框: QDialo ...
- Python机器学习第一章
1. 机器学习 (Machine Learning, ML) 1.1 概念:多领域交叉学科,涉及概率论.统计学.逼近论.凸分析.算法复杂度理论等多门学科.专门研究计算机怎样模拟或 ...