Sqlite3:OperationalError:在“ TABLE”附近:语法错误

时间:2019-06-26 17:06:11

标签: python mysql sqlite

使用sqlite3时出现以下错误

  

OperationalError:“表格”附近:语法错误

此行发生错误:

c.execute('INSERT TABLE IF NOT EXISTS ' + bracketName + ' (player_1 TEXT, player_2 TEXT, winner TEXT, loser TEXT, player_1_score INTEGER, player_2_score INTEGER, round TEXT)')

搜索此错误表明,尽管将“表”用作表的名称(尽管是保留字),但仍会引起该问题。在我的情况下,情况并非如此,因为我正在为表命名存储在变量“括号”中的所有内容。

我不确定如何添加更多代码以使其成为可重现的示例,所以我希望问题在语法上很明显

1 个答案:

答案 0 :(得分:3)

正如前面提到的注释,创建新表的命令是CREATE TABLE。 INSERT用于在现有表中创建新行。但是,据我所知(并提及您的问题),您不能对表名使用参数替换。因此,这将起作用:

c.execute('CREATE TABLE IF NOT EXISTS ' + bracketName + ' (player_1 TEXT, player_2 TEXT, winner TEXT, loser TEXT, player_1_score INTEGER, player_2_score INTEGER, round TEXT)')

但是,正如已经指出的那样,这不是很安全。从This Answer提取:如果您担心注入,请尝试编写一个在传递字符串之前清除字符串的函数。该答案给出了一个“清除程序”的示例,该清除程序仅将字母数字字符传递给狂热的注入攻击。