繁体   English   中英

Python3 + DB:“从`table`中选择*,其中`field` IN(...)和`field2` ='…'”

[英]Python3 + DB: “Select * from `table` where `field` IN (…) AND `field2` = '…'”

使用Python3和

cursor.execute(sql, {key1: val1, key2: val2})

语法,我想执行一个安全的(SQL注入证明)查询,例如:

SELECT * FROM `table`

WHERE 

a = %(fieldA)s AND b IN (%(fieldB)s)

基本上,我正在寻找这个问题的答案,但是要使用Python3语法并使用多个字段。

如果我使用@nosklo的答案:

format_strings = ','.join(['%s'] * len(list_of_ids))
cursor.execute("DELETE FROM foo.bar WHERE baz IN (%s)" % format_strings,
tuple(list_of_ids))

1)如何使用字典语法实现这种双重格式语法( format_strings, tuple(list_of_ids))

cursor.execute(sql, {'field': 'val'})

2)以及在有多个字段的情况下如何实现它:

cursor.execute(sql, {'x': 'myList', 'y':myOtherVar'})

好的,我想我刚刚发现了它:

myList = ["a", "b", "c"]
myStr = "d"

sql = """SELECT * FROM `table`

WHERE 

a = %(myStr)s AND b IN %(myList)s"""

cursor.execute(sql, {
    myList: myList,
    myStr: myStr
})

已经尝试使用IN (%(myStr)s)而不是IN %(myStr)s

我仍然不明白为什么有些人声称在这种情况下我们必须使用元组,因为列表工作得很好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM