1. 程式人生 > >【mysql資料庫】python指令碼執行SQL語句,關於字串變數的注意事項

【mysql資料庫】python指令碼執行SQL語句,關於字串變數的注意事項

轉載一篇網友介紹Python 資料庫的Connection、Cursor兩大物件,寫的非常好。
https://blog.csdn.net/guofeng93/article/details/53994112

最新在使用python操作資料庫,發現使用cursor.execute執行mysql資料時,字串變數規範用法,總結如下。
1、字串變數與SQL語句在同一個表示式中時,萬用字元使用 '%s',有單引號。字串變數與SQL語句在不通過表示式中時,萬用字元使用 %s,無單引號。
2、SQL語句中的非字串變數時,萬用字元使用 %s,任何時候都無單引號。

測試資料:

1、構建1個測試表test,包含3個欄位,分別是int、varchar、varchar型別。

2、測試SQL語句中包含1個字元變數

測試語句 測試結果

cursor.execute("insert into `test`(`姓名`) values('%s')", ('路人甲')) 

cursor.execute("insert into `test`(`姓名`) values('%s')" % ('路人甲')) 

name = '路人甲'
cursor.execute("insert into `test`(`姓名`) values('%s')", name)

name = '路人甲'
sql= "insert into `test`(`姓名`) values('%s')"
val = name
cursor.execute(sql, val)

失敗,寫入資料庫的名字是字元 %s,不是預期的 路人甲

cursor.execute("insert into `test`(`姓名`) values(%s)" , ('路人甲'))

或 

cursor.execute("insert into `test`(`姓名`) values(%s)" % ('路人甲')) 

name = '路人甲'
sql= "insert into `test`(`姓名`) values(%s)"        
val = name
 cursor.execute(sql, val)

失敗,語法錯誤

cursor.execute("insert into `test`(`姓名`) values('路人甲')")

name = '路人甲'
sql= "insert into `test`(`姓名`) values('%s')" % name        
cursor.execute(sql)

成功,資料庫寫入路人甲

粗體部分為推薦用法

3、測試2個變數,分別測試2個都是字串,1個整形和1個字串

測試語句 測試結果

number = -100
name = '路人甲'
sql= "insert into `test`(`學號`,`姓名`) values(%s, %s)" % (number, name)
cursor.execute(sql)

number = -100
name = '路人甲'
sql= "insert into `test`(`學號`,`姓名`) values('%s', '%s')"
val=(number, name)
cursor.execute(sql, val)

number = -100
name = '路人甲'
sql= "insert into `test`(`學號`,`姓名`) values(%s, '%s')"
val=(number, name)
cursor.execute(sql, val)

number = -100
name = '路人甲'
course = 'C語言'
sql= "insert into `test`(`學號`,`姓名`,`C語言`) values(%s, '%s',  '%s')"
val=(number, name, course)
cursor.execute(sql, val)

number = -100
name = '路人甲'
course = 'C語言'
sql= "insert into `test`(`學號`,`姓名`,`課程`) values(%s, %s, %s)" % (number, name, course)
cursor.execute(sql)

失敗,語法錯誤

number = -100
name = '路人甲'
sql= "insert into `test`(`學號`,`姓名`) values(%s, '%s')" % (number, name)
cursor.execute(sql)

number = -100
name = '路人甲'
course = 'C語言'
sql= "insert into `test`(`學號`,`姓名`,`課程`) values(%s, '%s', '%s')" % (number, name, course)
cursor.execute(sql)

number = -100
name = '路人甲'
sql= "insert into `test`(`學號`,`姓名`) values('%s', '%s')" % (number, name)
cursor.execute(sql)

number = -100
name = '路人甲'
sql= "insert into `test`(`學號`,`姓名`) values(%s, %s)"
val=(number, name)
cursor.execute(sql, val)

number = -100
name = '路人甲'
course = 'C語言'
sql= "insert into `test`(`學號`,`姓名`,`課程`) values(%s, %s, %s)"
val=(number, name, course)
cursor.execute(sql, val)

成功,資料庫寫入 -100和路人甲

粗體部分為推薦用法