У меня есть 2 списка date_list = [2016-01,2016-02,2016-01,2016-01] string_list = [abc, ghf, rtks] Мне нужно сделать запрос sql к одной из таблиц (table1), чтобы получить данные столбца (col1), где col2 - это итерация из list1 и col3 в date_list

for r in string_list:
    elements= ','.join('?' * len(date_list))
    cursor.execute("select col1 from table1 where col2 = ? and col3 in (%s)"r,% elements,tuple(date_list))
    abcd = cursor.fetchall()

Это дает мне ошибку. Однако, если я удалю из запроса предложение col2, он будет работать нормально. Пожалуйста, помогите мне добавить несколько предложений в этот запрос.

0
Brad 15 Апр 2016 в 22:20

2 ответа

Лучший ответ

Похоже, вы пытаетесь вставить параметр r не в то место. Вы хотите передать это как значение параметра.

for r in string_list:
    elements = ','.join('?' * len(date_list))
    cursor.execute(
        "select col1 from table1 where col2 = ? and col3 in (%s)" % elements,
        (r,) + tuple(date_list)
    )
    abcd = cursor.fetchall()
0
Jeff Mercado 15 Апр 2016 в 19:56

Мне кажется, что вы смешиваете 2 стратегии форматирования строк.

Попробуйте переписать код, используя только форматирование %. Что-то вроде:

string_list = ["abc", "ghf", "rtks"]
date_list = ["2016-01","2016-02","2016-01","2016-01"]
for r in string_list:
    cursor.execute(
      "select col1 from table1 where col2 = '%s' and col3 in %s" 
       % (r,tuple(date_list))
    )

Это дает этот sql-запрос:

select col1 from table1 where col2 = 'abc' and col3 in ('2016-01', '2016-02', '2016-01', '2016-01')
select col1 from table1 where col2 = 'ghf' and col3 in ('2016-01', '2016-02', '2016-01', '2016-01')
select col1 from table1 where col2 = 'rtks' and col3 in ('2016-01', '2016-02', '2016-01', '2016-01')
0
Amio.io 15 Апр 2016 в 20:17