我在python中有这个函数,试图用字符串更新表:
table.execute("UPDATE " + tableName + " SET " +
colName + "=" + colVal +
" WHERE " + name + "=(" + val + ")")
它总是返回错误:sqlite3.OperationalError:near" Look":语法错误。
我应该如何处理我的" val" value,以便可以将字符串添加到数据库中?
==更新== 试过这个问题但是它没有工作:
table.execute("UPDATE " + tableName + " SET " +
colName + "=" + colValue +
" WHERE " + name + "= ?", (val,))
答案 0 :(得分:-2)
在SQL查询中使用直接变量存在一些主要缺陷:
http://www.w3schools.com/sql/sql_injection.asp
详细了解它们。但是,如果您确实希望使代码正常工作,则可以进行以下更改:
table.execute("UPDATE " + tableName + " SET " +
colName + "='" + colVal +
"' WHERE " + name + "=('" + val + "')")
table.commit()
由于val / colVal是传递给查询的字符串,因此应该对其进行转义。
在此处添加了示例示例:https://gist.github.com/vi3k6i5/869d299e8afe99593b79ae41051ebf63
正如@Deepspace在注释中指出的那样,直接在db上执行的SQL并不安全。
因此,做到这一切的一个好方法是使用ORM。类似django或SQLalchemy
的内容通过他们的例子,他们很简单。他们有自己的结构来改变db。更新/插入/删除所有内容。