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))