插入值时出现错误。我的数据库有3列。在此处初始化一个自动递增整数:
connection.execute("CREATE TABLE IF NOT EXISTS {tn} ({nf1} {ft1} PRIMARY KEY AUTOINCREMENT)"\
.format(tn = tableName, nf1 = "IDPK", ft1 = "INTEGER"))
两个文本字段初始化如下:
connection.execute("ALTER TABLE {tn} ADD COLUMN '{cn}' {ct}".format(tn = tableName, cn = "foo", ct = "TEXT"))
connection.execute("ALTER TABLE {tn} ADD COLUMN '{cn}' {ct}".format(tn = tableName, cn = "bar", ct = "TEXT"))
执行在这里:
connection.execute("INSERT INTO {tn} VALUES (NULL, {col1}, {col2})".format(tn = tableName, col1 = text1, col2 = text2))
抛出的错误是:
sqlite3.OperationalError: no such column: "obfuscatedTextStringInText1"
我不明白为什么它认为列名在text1中。我在第1列和第2列中插入了一个值,我认为是用这种语法,作为带有NULL关键字的自动递增函数。
3条答案
按热度按时间s71maibg1#
相反,parameterize 你的查询:
请注意,我们cannot parameterize table or column names-确保您验证并正确转义
tableName
,或信任您的源代码。mlnl4t2r2#
{col1}
和{col2}
周围应该有引号,因为它们作为文本值插入。例如,它目前正在评估如下:mwngjboj3#
不要使用字符串格式将变量插入查询。这是危险的(容易受到SQL注入攻击)和错误提示(正如您已经看到的)。
(from@alecxe的回答)我删除了所有的字符串格式,以获得更安全的示例: