1064,“你的SQL语法有错误”插入MySql

问题描述 投票:0回答:2

我的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一直说有语法错误。

python mysql sql pandas pycharm
2个回答
0
投票

发生错误的原因是您为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)
)

0
投票

尝试从值部分中的所有变量中取消'

values (%s, %s, %s .....)而不是values ('%s', '%s', ...)

© www.soinside.com 2019 - 2024. All rights reserved.