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. android - 請問一下 類似QQ音樂底部播放 在每個頁面都顯示 是怎么做的?2. thinkPHP5中獲取數據庫數據后默認選中下拉框的值,傳遞到后臺消失不見。有圖有代碼,希望有人幫忙3. mysql主從 - 請教下mysql 主動-被動模式的雙主配置 和 主從配置在應用上有什么區別?4. 求救一下,用新版的phpstudy,數據庫過段時間會消失是什么情況?5. python小白 關于類里面的方法獲取變量失敗的問題6. Python2中code.co_kwonlyargcount的等效寫法7. django - Python error: [Errno 99] Cannot assign requested address8. python小白,關于函數問題9. [python2]local variable referenced before assignment問題10. python - vscode 如何在控制臺輸入
