使用python替换字符串中的子字符串

时间:2018-03-15 13:15:45

标签: python

我在Python中有一个查询字符串,如下所示:

query = "select name from company where id = 13 order by name;"

我希望能够动态更改id。因此,我想找到id = 13并将其替换为新的ID。

我可以这样做:

query.replace("id = 13", "id = {}".format(some_new_id))

但如果查询中包含id= 13id=13id =13...则无效。

如何避免?

3 个答案:

答案 0 :(得分:1)

将变量直接粘贴到查询中会使您容易受到SQL注入的攻击。<​​/ p>

如果要将查询传递给要在数据库中执行的函数,则该函数应接受其他参数。

例如,

query = "select name from company where id = %s order by name"
cursor.execute(query, params=(some_other_id,))

答案 1 :(得分:0)

最好使用格式化的sql。

<强>实施例

query = "select name from company where id = %s order by name;".
cursor.execute(query, (id,))

答案 2 :(得分:0)

动态构建字符串的常用解决方案是字符串格式化,即

tpl = "Hello {name}, how are you"
for name in ("little", "bobby", "table"):
    print(tpl.format(name))

但是(这是一个很大的“但是”):你 NOT 想要为SQL查询执行此操作(假设您要使用此查询将此查询传递给您的数据库你的db的python api)。

在这里不使用字符串格式有两个原因:第一个是正确处理引用和转义是最棘手的,第二个也是更重要的一个是it makes your code vulnerable to SQL injections attacks

所以在这种情况下,正确的解决方案是use prepared statements instead

# assuming MySQL which uses "%" as placeholder, 
# consult your db-api module's documentation for 
# the proper placeholder

sql = "select name from company where id=%s order by name"
cursor = yourdbconnection.cursor()
cursor.execute(sql, [your_id_here])