python2.7 - python 如何執行mysql單個參數過濾
問題描述
使用python執行mysql,報錯了:
name = 'AAA’A'cursor.execute(’select * from tb where name=%s’,name)cursor.execute(’select * from tb where name=%s’,(name))
都會報錯
query = query % tuple([db.literal(item) for item in args])TypeError: not all arguments converted during string formatting
但是以下不會報錯:
name = 'AAA’A'cursor.execute(’select * from tb where name=%s and %s’,(name,1))
python27 如何過濾mysql 單個參數
問題解答
回答1:因為題主并未提及連接數據庫用的哪個庫,所以假設你使用的是mysqldb。可以看一下mysqldb的源碼:
...def execute(self, query, args=None): ''' ... args -- optional sequence or mapping, parameters to use with query. ... ''' if args is not None:# 首先判斷args是否為字典類型if isinstance(args, dict): # 以k-v形式填入查詢語句中。 query = query % dict((key, db.literal(item)) for key, item in args.iteritems())# 當args為非字典類型時else: # 遍歷args, 最后生成一個元組填入查詢語句中。 query = query % tuple([db.literal(item) for item in args]) ...
可以看到,args參數為一個可選的序列或者映射,即args參數的期望類型是list或者tuple。那么回頭再看一下你給的輸入參數:
>>> name = ’test’>>> type(name)<type ’str’>>>> type((name))<type ’str’>>>> type((’name’, 1))<type ’tuple’>
所以,解決方法很簡單:
>>> type((name, ))<type ’tuple’>>>> cursor.execute(’select * from tb where name=%s’,(name, ))1L
這里就涉及到一個小細節。當創建只有一個元素的元組時,需要加一個逗號,否則解釋器會當作一個字符串創建。
回答2:cursor.execute(’select * from tb where name='%s'’,name)
相關文章:
1. Python從URL中提取域名2. php傳對應的id值為什么傳不了啊有木有大神會的看我下方截圖3. python - scrapy url去重4. python - Flask寫的注冊頁面,當注冊時,如果填寫數據庫里有的相同數據,就報錯5. 關于mysql聯合查詢一對多的顯示結果問題6. 實現bing搜索工具urlAPI提交7. 數據庫 - Mysql的存儲過程真的是個坑!求助下面的存儲過程哪里錯啦,實在是找不到哪里的問題了。8. python - oslo_config9. MySQL主鍵沖突時的更新操作和替換操作在功能上有什么差別(如圖)10. 小白學python的問題 關于%d和%s的區別
