sqlite3行无法正确评估

sqlite3行无法正确评估

我在这里的某个地方一定有一个错误,但我找不到它,没有编写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^


附带说明一下,您不应该通过字符串格式进行查询-这是不安全的,这使您的代码容易受SQL injection attacks的影响,并导致类型转换和引号出现问题(如您所见)。使用parameterized queries。不幸的是,you cannot parameterize table and column names并应单独验证它们;但是您可以对列值进行参数替换:

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})

关于python - python sqlite3行无法正确评估,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36242798/

10-11 07:40