【mysql数据库】python 3.7 脚本执行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和路人甲

粗体部分为推荐用法

   

 

 

 

你可能感兴趣的:(mysql数据库)