我的IDE上有以下错误:
MySQLdb._exceptions.ProgrammingError:(1064,“您的SQL语法有错误;请查看与您的MySQL服务器版本对应的手册,以便在'[email protected]'附近使用正确的语法,'88zlsj5j','Kristopher O'Connell','21','F','CMPSC','77'在第1行“)
以下是导致错误的代码的一部分:
for a, b, c, d, e ,f, g, h in zip(df_stu['Email'], df_stu['Password'], df_stu['Full Name'], df_stu['Age'], df_stu['Gender'], df_stu['Major'], df_stu['Street'], df_stu['Zip']):
cursor.execute("INSERT INTO LSU.Student (Semail, Spassword, Sname, Sage, Sgender, Smajor, Sstreet, Szipcode) "
"VALUES ('%s', '%s', '%s', '%d', '%s', '%s', '%s', '%d')" % (a, b, c, d, e, f, g, h))
这是我的CREATE TABLE:
cursor.execute(
"CREATE TABLE IF NOT EXISTS LSU.Student (
Semail CHAR(50),
Spassword CHAR(20),
Sname CHAR(50),
Sage INT,
Sgender CHAR(5),
Smajor CHAR(50),
Sstreet CHAR(50),
Szipcode INT,
PRIMARY KEY (Semail))"
)
这看起来对我来说,但IDE一直说有语法错误。
发生错误的原因是您为insert传递的值之一包含单引号。 MySQL无法告诉歧义周围引号的嵌入式引用。
'Kristopher O'Connell'
这是使用绑定参数的替代语法,它应该与python一起使用:
cursor.execute(
"INSERT INTO LSU.Student
(Semail, Spassword, Sname, Sage, Sgender, Smajor, Sstreet, Szipcode)
VALUES (%s, %s, %s, %d, %s, %s, %s, %d)",
(a, b, c, d, e, f, g, h)
)
使用此语法,您的数据库驱动程序会自动处理转义。这也是一种更安全的语法,可以防止SQL注入。
注意:根据您使用的API,这可能也是:
cursor.execute(
"INSERT INTO LSU.Student
(Semail, Spassword, Sname, Sage, Sgender, Smajor, Sstreet, Szipcode)
VALUES (?, ?, ?, ?, ?, ?, ?, ?)",
(a, b, c, d, e, f, g, h)
)
尝试从值部分中的所有变量中取消'
。
如values (%s, %s, %s .....)
而不是values ('%s', '%s', ...)