python sqlite3双引号导致查询失败

时间:2013-08-04 21:57:07

标签: python database django sqlite

我有一个Sqlite3表     糊{        paste_id int,        paste_content文本     }

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

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

但由于内容可能包含'或'“,因此我的执行查询无法正常工作。 我怎样才能正确地逃避这个?

1 个答案:

答案 0 :(得分:2)

使用字符串插值。改为使用SQL参数:

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

cursor.execute(UPDATE_Statement, content)

并将转义(并正确引用)保留到数据库适配器。这样:

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

请参阅Django SQL文档中的Passing parameters into raw()

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