python2.7 - python 如何執(zhí)行mysql單個(gè)參數(shù)過(guò)濾
問(wèn)題描述
使用python執(zhí)行mysql,報(bào)錯(cuò)了:
name = 'AAA’A'cursor.execute(’select * from tb where name=%s’,name)cursor.execute(’select * from tb where name=%s’,(name))
都會(huì)報(bào)錯(cuò)
query = query % tuple([db.literal(item) for item in args])TypeError: not all arguments converted during string formatting
但是以下不會(huì)報(bào)錯(cuò):
name = 'AAA’A'cursor.execute(’select * from tb where name=%s and %s’,(name,1))
python27 如何過(guò)濾mysql 單個(gè)參數(shù)
問(wèn)題解答
回答1:因?yàn)轭}主并未提及連接數(shù)據(jù)庫(kù)用的哪個(gè)庫(kù),所以假設(shè)你使用的是mysqldb。可以看一下mysqldb的源碼:
...def execute(self, query, args=None): ''' ... args -- optional sequence or mapping, parameters to use with query. ... ''' if args is not None:# 首先判斷args是否為字典類(lèi)型if isinstance(args, dict): # 以k-v形式填入查詢(xún)語(yǔ)句中。 query = query % dict((key, db.literal(item)) for key, item in args.iteritems())# 當(dāng)args為非字典類(lèi)型時(shí)else: # 遍歷args, 最后生成一個(gè)元組填入查詢(xún)語(yǔ)句中。 query = query % tuple([db.literal(item) for item in args]) ...
可以看到,args參數(shù)為一個(gè)可選的序列或者映射,即args參數(shù)的期望類(lèi)型是list或者tuple。那么回頭再看一下你給的輸入?yún)?shù):
>>> name = ’test’>>> type(name)<type ’str’>>>> type((name))<type ’str’>>>> type((’name’, 1))<type ’tuple’>
所以,解決方法很簡(jiǎn)單:
>>> type((name, ))<type ’tuple’>>>> cursor.execute(’select * from tb where name=%s’,(name, ))1L
這里就涉及到一個(gè)小細(xì)節(jié)。當(dāng)創(chuàng)建只有一個(gè)元素的元組時(shí),需要加一個(gè)逗號(hào),否則解釋器會(huì)當(dāng)作一個(gè)字符串創(chuàng)建。
回答2:cursor.execute(’select * from tb where name='%s'’,name)
相關(guān)文章:
1. mysql 查詢(xún)身份證號(hào)字段值有效的數(shù)據(jù)2. javascript - ios返回不執(zhí)行js怎么解決?3. 視頻文件不能播放,怎么辦?4. javascript - angular使從elastichearch中取出的文本高亮顯示,如圖所示5. python - 爬蟲(chóng)模擬登錄后,爬取csdn后臺(tái)文章列表遇到的問(wèn)題6. python bottle跑起來(lái)以后,定時(shí)執(zhí)行的任務(wù)為什么每次都重復(fù)(多)執(zhí)行一次?7. mysql - 分庫(kù)分表、分區(qū)、讀寫(xiě)分離 這些都是用在什么場(chǎng)景下 ,會(huì)帶來(lái)哪些效率或者其他方面的好處8. javascript - 求幫助 , ATOM不顯示界面!!!!9. javascript - 移動(dòng)端自適應(yīng)10. html5 - HTML代碼中的文字亂碼是怎么回事?
