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. windows誤人子弟啊2. php傳對應的id值為什么傳不了啊有木有大神會的看我下方截圖3. 如何用筆記本上的apache做微信開發的服務器4. python - linux 下用wsgifunc 運行web.py該如何修改代碼5. 關于mysql聯合查詢一對多的顯示結果問題6. 實現bing搜索工具urlAPI提交7. 冒昧問一下,我這php代碼哪里出錯了???8. mysql優化 - MySQL如何為配置表建立索引?9. MySQL主鍵沖突時的更新操作和替換操作在功能上有什么差別(如圖)10. 數據庫 - Mysql的存儲過程真的是個坑!求助下面的存儲過程哪里錯啦,實在是找不到哪里的問題了。
