MySQL和Python:SQL语句中并未使用所有参数

问题描述

我已经使用MysqL创建了以下数据库

CREATE TABLE tutors (
id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,name VARCHAR(50) NOT NULL,email VARCHAR(320) NOT NULL,description VARCHAR(400) NOT NULL,image VARCHAR(150) NOT NULL,applyDate DATE NOT NULL)

image列存储我在文件系统中存储的图像的绝对路径

但是,当我尝试插入用户输入的数据时,例如

arguments = ("Name","[email protected]","desc","C:\\Users\\path\\to\\image.png","2020-08-23")

使用Python和代码

cursor.execute("INSERT INTO tutors (name,email,description,image,applyDate) VALUES (?,?,?)",arguments)
conn.commit()

它给我以下错误

MysqL.connector.errors.ProgrammingError: Not all parameters were used in the sql statement.

当我将每个?替换为%s时,它可以工作,但是我已经读到%s容易受到sql注入攻击,因此,我尽可能避免使用它。 ?无法正常工作吗?

解决方法

?占位符仅与准备好的语句游标一起使用,例如cursor = conn.cursor(prepared=True)

如果您不想或不需要使用准备好的语句,请使用%s作为占位符。这是安全的,因为在执行查询之前,将对它们的值进行转义和引用。