在Python中, 通过pymysql库连接Mysql数据库的sql语句参数传递时需要注意:
mysql的sql语句的字符串格式化不是标准的python的字符串格式化, 在python中无论字符串,数字或者其他类型, 在sql字符串中都要使用字符串占位符%s , 并且%s不能加引号.
sql语句参数传递方式有如下几种:
一.sql语句直接拼接
tn="co2"
qt =1
val = 2.524
sql = " insert into `mes_realdata` (`TagName`, `Quality`, `Value`) values "
(' ''' + tn+ "', '''' + qt +"', '" + val +"'' ); "
二.使用参数替代
tn="co2"
qt =1
val = 2.524
sql = " insert into `mes_realdata` (`TagName`, `Quality`, `Value`) values (%s,%s,%s); "
sql = sql %(tn, qt, val)
注:如果是单个变量的,使用如下方式:
sql = " insert into `mes_realdata` (`TagName`) values (%s); "
sql = sql %tn
三.使用数组的方式
tn="co2"
qt =1
val = 2.524
sql = " insert into `mes_realdata` (`TagName`, `Quality`, `Value`) values (%s,%s,%s); "
cursor.execute(sql, [tn, qt, val] )
四.使用字典dict类型传递变量
sql = ''' insert into `mes_realdata` (`TagName`, `Quality`, `Value`) values
('%(TagName)s', '%(Quality)s', '%(Value)s' ); '''d ={'TagName': 'co2', 'Quality': 1, 'Value': '6.672067'}
cursor.execute( sql %(d) )
上面这种方法适合字段比较多的时候,字段和值对应顺序不会错.