python字符串格式需要引用格式说明符,但字符串中带有引号

时间:2018-10-09 17:08:51

标签: python-3.x cassandra pymongo-3.x

我在尝试为Cassandra正确格式化查询字符串时遇到问题。我有我正在参加的这个查询

session.execute("UPDATE query3 SET movietitle = '{:s}' WHERE itemid = {:d} and userid in (1, 2000)".format(cols[1], id))

问题在于movietitle的格式可以为Toy Story (1995)Mr. Holland's Opus (1995),因此,如果没有引号,则括号会引起查询问题。但是,单引号也会引起问题,因为电影标题的名称中可能带有引号。有没有一种构造此查询的巧妙方法?

1 个答案:

答案 0 :(得分:3)

请勿使用Python的内置字符串format函数在查询字符串中设置值。这将使您的应用程序面临一类称为SQL / CQL注入攻击的错误和安全问题。

相反,DataStax Python驱动程序支持参数化查询。

Session.execute(...)带有一个parameters参数,可让您指定要替换的值的序列 dict

例如,您的查询应如下所示:

session.execute("UPDATE query3 SET movietitle = %s WHERE itemid = %s and userid in (1, 2000)", parameters=(cols[1], id))

如果需要多次执行相同的查询,还可以考虑使用prepared statements。这些具有性能优势。