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