Панды read_sql с предложением where, используя "in" - PullRequest
0 голосов
/ 18 декабря 2018

Help!

Мне нужно запросить таблицу с предложением «in», где SQL выглядит следующим образом:

select * from some_table where some_field in (?)

Первоначально я использовал наивный подход и попробовал это:

in_items = [1,2,3,4]
df = pd.read_sql(MY_SQL_STATEMENT, con=con, params=[in_items]

Что не сработало, выдает следующую ошибку:

The SQL contains 1 parameter markers, but 4 parameters were supplied

Где я застрял, выясняется, как передать список элементов в виде одного параметра.

Я могу использовать метод конкатенации строк, например:

MY_SQL = 'select * from tableA where fieldA in ({})'.format(
  ','.join([str(x) from x in list_items]))
df = pd.read_sql(MY_SQL, con=con)

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

Я также открыт для, возможно, более умного способа сделать это.:)

1 Ответ

0 голосов
/ 18 декабря 2018

Просто отформатируйте заполнители, а затем передайте ваши параметры в pandas.read_sql.Обратите внимание, маркеры-заполнители зависят от DB-API: pyodbc / sqlite3 использует qmarks ?, а большинство других используют %s.Ниже предполагается бывший маркер:

in_items = [1,2,3,4]
MY_SQL = 'select * from tableA where fieldA in ({})'\
           .format(', '.join(['?' for _ in in_items]))
# select * from tableA where fieldA in (?, ?, ?, ?)

df = pd.read_sql(MY_SQL, con=con, params=[in_items])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...