我在.format()方面遇到了一些困难。
tup = [fname,lname,email,pwd,coun,add]
con = db.connect('localhost', 'root', '', 'lora');
with con:
cur = con.cursor()
insert_sql = ('INSERT INTO EMPLOYEE(fname, lname, email, pwd, coun, add) VALUES("%s", "%s", "%s", "%s", "%s", "%s" )'% (fname, lname, email,
pwd, coun, add))
cur.execute(insert_sql)
执行后,它会显示此错误。
raise errorclass(errno, errval)
pymysql.err.ProgrammingError: (1064, 'You have an error in your
SQL syntax; check the manual that corresponds to your MariaDB
server version for the right syntax to use near \'add)
VALUES("","ee","","de","","")\' at line 1'
答案 0 :(得分:0)
我认为问题出在format()
上。
我认为问题是 ADD
是MySQL保留字
请参阅MySQL参考手册:https://dev.mysql.com/doc/refman/5.6/en/keywords.html
要将保留字引用为标识符(例如列名),标识符将需要使用表名或表别名限定,或者(如INSERT语句的情况)
标识符需要转义
默认情况下,MySQL使用反引号字符来转义标识符,例如
INSERT INTO ... ( ..., col, `add` ) VALUES
^ ^
(如果在ANSI_QUOTES
中启用sql_mode
,那么我们也可以使用双引号来转义标识符,就像Oracle使用的其他数据库一样。)
首选做法是避免使用保留字和关键字作为标识符。
代码中显示的模式似乎容易受到SQL注入攻击。 (我们不会发现SQL文本中包含的变量保证安全。
最佳做法是将预备语句与绑定占位符一起使用。
https://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet#Introduction