python sqlite3行未正确评估

时间:2016-03-27 01:13:45

标签: 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):
    File "<stdin>", line 2, in <module>
    sqlite3.OperationalError: no such column: someword

&#39; someword&#39;应该是它插入的值,而不是它正在寻找的列,对吧?

1 个答案:

答案 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})
相关问题