执行更新时,python sqlite3语法错误与字符串

时间:2016-12-19 12:14:32

标签: python sqlite sql-update

我在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,))

1 个答案:

答案 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。类似djangoSQLalchemy

的内容

通过他们的例子,他们很简单。他们有自己的结构来改变db。更新/插入/删除所有内容。