Я хочу написать SQL-запрос, чтобы получить данные для всех элементов списка, скажем
select name from students where id = |IN THE LIST l|
Как мне это сделать?
Переведено автоматически
Ответ 1
Ответы до сих пор заключались в преобразовании значений в простую строку SQL. Это абсолютно нормально для целых чисел, но если мы захотим сделать это для строк, мы получим проблему с экранированием.
Вот вариант, использующий параметризованный запрос, который будет работать для обоих:
placeholder= '?'# For SQLite. See DBAPI paramstyle. placeholders= ', '.join(placeholder for unused in l) query= 'SELECT name FROM students WHERE id IN (%s)' % placeholders cursor.execute(query, l)
Ответ 2
Самый простой способ - сначала преобразовать список в tuple
t = tuple(l) query = "select name from studens where id IN {}".format(t)
Ответ 3
Не усложняйте, решение для этого простое.
l = [1,5,8]
l = tuple(l)
params = {'l': l}
cursor.execute('SELECT * FROM table where id in %(l)s',params)
Надеюсь, это помогло!!!
Ответ 4
Нужный вам SQL
select name from studens where id in (1, 5, 8)
Если вы хотите создать это из python, вы могли бы использовать
l = [1, 5, 8] sql_query = 'select name from studens where id in (' + ','.join(map(str, l)) + ')'
Функция map преобразует список в список строк, которые можно склеить запятыми с помощью метода str.join.
Альтернативно:
l = [1, 5, 8] sql_query = 'select name from studens where id in (' + ','.join((str(n) for n in l)) + ')'