文章連接:https://blog.csdn.net/u011878172/article/details/72599120sql
【問題描述】函數
一、在一條查詢語句中,查詢條件既包含了整形又包含了字符串型,執行查詢函數後,直接報%d format: a number is required, not strfetch
二、例如 ,以下sql 語句 sql = 'select productid from product where productid = %d and productName = %s'ui
【實例代碼】url
#coding=utf-8
import MySQLdb.net
def createConnection():調試
try:
conn = MySQLdb.connect('127.0.0.1', 'root', '000000', 'auto', charset='utf8')
except Exception as e:
print e
return conn
return conncode
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 resultorm
if __name__ == '__main__':blog
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
【問題解決】
一、當調試到csor.execute(sql, fieldValue)語句時,選擇跳入到,這是斷點會進入到MySQLdb第三方模塊的cursors.py文件的execute方法裏,因爲fieldValue參數爲元組類型, 斷點會進入到 query = query % tuple([db.literal(item) for item in args]),再次選擇進入
二、這時斷點會進入到MySQLdb第三方模塊的connections.py的literal方法中,該方法只有一條語句(return self.escape(o, self.encoders)),在這條語句中斷點選擇進入
三、這時斷點會進入到MySQLdb第三方模塊的converts.py文件的Thing2Str方法,致使問題的緣由也正是在該方法中,如下是Thing2Str的源碼:
def Thing2Str(s, d): """Convert something into a string via str().""" return str(s) 問題是因爲代碼把參數 s 都轉換爲了 str類型, 因此致使了把整形轉換爲了 str類型, 致使執行SQL語句時,系統提示數據類型不正確的錯誤四、爲了解決這個問題,只須要把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 版權聲明:本文爲博主原創文章,轉載請附上博文連接!