0

我有一个 Sqlite3 表 paste{ paste_id int, paste_content text }

我必须做一个更新语句,其中文本可能包含单引号和 "" 双引号。在python中我写了

UPDATE_Statement = "Update paste set paste_content = '%s' where paste_id=id" %(content)

但由于内容可以包含 ' 或 "" ,我的执行查询无法正常工作。我怎样才能正确逃脱呢?

4

1 回答 1

2

不要使用字符串插值。请改用 SQL 参数:

UPDATE_Statement = "Update paste set paste_content = %s where paste_id=%s"

cursor.execute(UPDATE_Statement, content)

并将转义(和正确的引用)留给数据库适配器。这个:

  • 简化您的代码
  • 正确引用不同的数据类型
  • 让数据库为不同的数据重用查询计划
  • 防止 SQL 注入攻击

请参阅 Django SQL 文档中的传递参数raw()

如果您使用不同的数据库连接器(不是 Django 提供的连接),请验证文档中参数占位符的特定样式。例如,sqlite3数据库适配器?用作占位符语法。

于 2013-08-04T21:58:53.980 回答