python sqlite3行计算不正确

python sqlite3行计算不正确,python,sql,sqlite,Python,Sql,Sqlite,我一定是在这里的某个地方出错了,但我找不到它,因为我对编写SQL没有太多的经验 >>> db.c.execute('INSERT INTO {tn} ({c1n}, {c2n}) VALUES ({wn}, {f})'.\ ... format(tn=db.table1, c1n=db.column1, c2n=db.column2, wn='someword', f=1)) 它正在给我回溯 Traceback (most recent call last):

我一定是在这里的某个地方出错了,但我找不到它,因为我对编写SQL没有太多的经验

>>> db.c.execute('INSERT INTO {tn} ({c1n}, {c2n}) VALUES ({wn}, {f})'.\
...    format(tn=db.table1, c1n=db.column1, c2n=db.column2, wn='someword', f=1))
它正在给我回溯

Traceback (most recent call last):
    File "<stdin>", line 2, in <module>
    sqlite3.OperationalError: no such column: someword

“someword”应该是它正在插入的值,而不是它正在查找的列,对吗?

您缺少值周围的引号:

INSERT INTO {tn} ({c1n}, {c2n}) VALUES ('{wn}', '{f}')
                                    HERE^
作为旁注,您不应该通过字符串格式进行查询-这是不安全的,您正在使代码容易受到类型转换和引号的攻击,并且您已经看到了类型转换和引号的问题。使用不幸的是,应该单独验证它们;但您可以为列值执行参数替换:

db.c.execute('INSERT INTO {tn} ({c1n}, {c2n}) VALUES (:wn, :f)'.\
    format(tn=db.table1, c1n=db.column1, c2n=db.column2), {'wn': 'someword', 'f': 1})

您缺少以下值周围的引号:

INSERT INTO {tn} ({c1n}, {c2n}) VALUES ('{wn}', '{f}')
                                    HERE^
作为旁注,您不应该通过字符串格式进行查询-这是不安全的,您正在使代码容易受到类型转换和引号的攻击,并且您已经看到了类型转换和引号的问题。使用不幸的是,应该单独验证它们;但您可以为列值执行参数替换:

db.c.execute('INSERT INTO {tn} ({c1n}, {c2n}) VALUES (:wn, :f)'.\
    format(tn=db.table1, c1n=db.column1, c2n=db.column2), {'wn': 'someword', 'f': 1})