猿问

内联列表以在python MySQLDB IN子句中使用

我知道如何将列表映射到字符串:


foostring = ",".join( map(str, list_of_ids) )

而且我知道我可以使用以下命令将该字符串放入IN子句中:


cursor.execute("DELETE FROM foo.bar WHERE baz IN ('%s')" % (foostring))

我需要使用MySQLDB安全地完成同一件事(避免SQL注入)。在上面的示例中,由于foostring没有作为执行参数传递,因此它很容易受到攻击。我还必须在mysql库之外引用和转义。


慕勒3428872
浏览 538回答 3
3回答

慕的地10843

无痛MySQLdb execute('...WHERE name1 = %s AND name2 IN (%s)', value1, values2)def execute(sql, *values):    assert sql.count('%s') == len(values), (sql, values)    placeholders = []    new_values = []    for value in values:        if isinstance(value, (list, tuple)):            placeholders.append(', '.join(['%s'] * len(value)))            new_values.extend(value)        else:            placeholders.append('%s')            new_values.append(value)    sql = sql % tuple(placeholders)    values = tuple(new_values)    # ... cursor.execute(sql, values)
随时随地看视频慕课网APP

相关分类

Python
我要回答