pymysql以表名作為變量傳遞進查詢語句中


1

在使用cursor.execute(sql, param)時,pymysql庫會自動轉義含有%s的字符串,所以不要畫蛇添足在SQL語句中給%s加引號了,會報1064的錯誤滴!

另外也有許多人使用有SQL注入隱患的cursor.execute(sql % param)這種用法,這樣是可以給%s加引號的。

2

在我們學習使用pymysql的時候有時需要把表名當做變量傳遞到sql語句中去執行,
然而我們的固定思維模式有時卻限制了我們:
如:我們知道傳遞變量可以用占位符%s,后面加上變量就行,
在pymysql中也有同樣的問題,我們在執行sql語句的時候可以把變量傳遞進去
類似:

sql = 'insert into TabName + ' value (%s %s)'
cursor.execute(sql, [name,age])

如果我們的TabName也是變量的話我們就會習慣性的這樣加

sql = 'insert into %s + ' value (%s %s)'
cursor.execute(sql, [tabname,name,age])

然后這樣報錯了我們才知道這樣不行,然后再去查原因,發現我們被自己的固定思維給限制住了(反正我是這樣的)

我也是在網上找了半天再找到了解決辦法,只要跳出這樣的思維就行了

錯誤:
sql = 'insert into %s + ' value (%s %s)'
cursor.execute(sql, [tabname,name,age])

改為:
sql = 'insert into %s(name,age)' %TabName + ' value (%s)'
cursor.execute(sql, [name])

這樣就沒問題了,有時候我們是能解決這類似的問題的,但是我們卻是往往被自己的固定思維給坑了!

python在mysql存儲圖片二進制文件

SQL 操作用字符串拼接不是一個好的習慣(這樣會有sql注入的風險), 試試用參數化查詢:

find_binary=pymysql.Binary(img_data)            #使用Binary()函數來指定存儲的是二進制
add_row = """INSERT INTO IMGS(ID,IMG,編號,DATAIMG) VALUES($s, %s, %s, %s)"""
cursor.execute(add_row, (7, 'K1', 'NO.', find_binary))


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM