我必须在这里遇到一个错误,但我找不到它,对编写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
&#39; someword&#39;应该是它插入的值,而不是它正在寻找的列,对吧?
答案 0 :(得分:4)
您缺少值周围的引号:
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})