繁体   English   中英

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

[英]python sqlite3 syntax error with string when doing update

我在python中有此功能,尝试用字符串更新表:

table.execute("UPDATE " + tableName + " SET " +
                       colName + "=" + colVal +
                        " WHERE " + name + "=(" + val + ")")

它总是返回错误:sqlite3.OperationalError:在“ Look”附近:语法错误。

我应该如何处理我的“ val”值,以便可以将字符串添加到数据库中?

==更新==尝试了此查询,但它也不起作用:

table.execute("UPDATE " + tableName + " SET " +
                        colName + "=" + colValue +
                        " WHERE " + name + "= ?", (val,))

在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。 更新/插入/删除所有内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM