在Python中,当用pymysql库,或者MySQLdb库进行数据库查询时,为了防止sql注入,可以在execute的时候,把参数单独带进去,例如:
def execute_v1(): config = { 'user': 'root', 'password': 'password1', 'host': '127.0.0.1', 'database': 'selfmoe', 'port': 3307, 'charset': 'utf8' } import pymysql # 打开数据库连接 cnx = pymysql.connect(**config) cur = cnx.cursor() cur.execute('select title,id from post where title =%(title)s', dict(title="**'*")) ret = cur.fetchall() print ret cur.close() cnx.close() return ret execute_v1()
cur.execute('select title,id from post where title =%(title)s', dict(title="**'*"))
这行中,title这个参数是以args的形式传进去的
查看pymysql的源码发现,当有args参数时,pymysql会做以下逻辑:
escape_string
(from pymysql import escape_string)函数对字符串进行转义所以