Python3 + DB: "Выбрать * из` таблицы`, где `поле` IN (...) И` field2` = '...' " - PullRequest
0 голосов
/ 11 февраля 2019

Используя 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'})

?

1 Ответ

0 голосов
/ 11 февраля 2019

ОК, думаю, я только что узнал:

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.

Я до сих пор не понимаю, почему некоторыелюди утверждают, что в этом случае мы должны использовать кортежи, поскольку список работал просто отлично.

...