防止sql注入mysqldb python3.6

防止sql注入mysqldb python3.6,mysql,python-3.6,Mysql,Python 3.6,这是我使用MySQLdb和python3.6的脚本 import MySQLdb # start connection db = MySQLdb.connect("localhost", "root", "asdf", "projecten") # create cursor c = db.cursor() # insert multiple records using a tuple cities = [ ('Boston', 'MA', 600000), ('Chica

这是我使用MySQLdb和python3.6的脚本

import MySQLdb

# start connection
db = MySQLdb.connect("localhost", "root", "asdf", "projecten")

# create cursor
c = db.cursor()

# insert multiple records using a tuple
cities = [
    ('Boston', 'MA', 600000),
    ('Chicago', 'IL', 2700000),
    ('Houston', 'TX', 2100000),
    ('Phoenix', 'AZ', 1500000)
]

# sql statement
sql = "INSERT INTO projecten.population(city, state, population) VALUES(%s, %s, %s)"

# insert data into table with list cities
c.executemany(sql, cities)

# commit changes
db.commit()

# close connection
db.close()
这对sql注入安全吗,因为有些人使用sql注入?而不是%s,而是在python3.6上,该python3.6不起作用

有关一个相关问题:

为避免注入,使用
execute
%s
代替每个变量,然后通过列表或元组传递值作为
execute
的第二个参数

按照此建议,您可以如下方式创建SQL:

sql ="""INSERT INTO projecten.population (city, state, population)
      VALUES (%s, %s, %s)"""

c.executemany(sql, cities)

这是一种比现在更安全的方法。

您的问题是什么?因为您使用的是%s而不是…所以我的脚本并不完全安全。我已经更新了我的答复。再次检查是否与我的代码中已有的相同我使用了3个双引号。3双引号允许我们指定在多行上生成并包含特殊字符的字符串,而无需转义它们。基本上,它们之间的任何东西都被认为是字符串。在处理大型输入以及通过python等通过sql/ssh调用命令时,这些工具非常方便。。