Q: Как передать несколько предикатов в SQL в Python - PullRequest
0 голосов
/ 09 марта 2019

Я использую ibm_db_dbi для соединения с базой данных DB2, и мне нужно передать несколько предикатов в SQL.У меня есть пример кода ниже, который работает, но у меня возникают трудности при передаче нескольких предикатов в SQL.Цель состоит в том, чтобы передать запрос в DB2, а затем записать данные обратно в список или фрейм данных в Python

. Вот запрос, который я хочу передать в базу данных:

select someStuff
from tableA a join tableB b on a.key = b.key
where a.value = %s and a.date between %s and %s

У меня есть фрейм данных, содержащий три столбца (атрибут value, date1 и date 2) и набор значений в каждом из столбцов.Мой план состоял в том, чтобы передать данные с помощью цикла for и выполнить запрос столько раз, сколько у меня есть строк в кадре данных, а затем добавить каждый результат обратно в объект списка.

Я пытаюсь достичь своей цели из скромного, простого примера запроса.До сих пор я был в состоянии выполнить запрос, который содержит один параметр, но мне было трудно сделать его расширяемым до трех.Проблема в том, что я не знаю, как ссылаться на три отдельных «столбца» в ссылке на объект запроса ниже.Любая помощь приветствуется

Ниже приведен мой тестовый запрос, который работает до сих пор:

blahList = [-123,123]
dataDB2 = []

for item in blahList:
  aTestSQL = """
  select '%s' value from sysibm.sysdummy1
  """
  query = aTestSQL % (item)
  curDB2 = conDB2.cursor()
  curDB2.execute(query)
  dataDB2.append(curDB2.fetchone())

1 Ответ

0 голосов
/ 14 марта 2019

Вот решение, которое я придумал, может быть, оно поможет следующему человеку:

blahlist = [(-1990963710,'ralph'), (3912019,'wreckit')]
dataDB2 = []

for idx, val in enumerate(blahlist):
  number = val[0]
  name = val[1]

  aTestSQL = """
  select %d NUMBER, '%s' NAME from sysibm.sysdummy1
  """
  query = aTestSQL % (number,name)
  curDB2 = conDB2.cursor()
  curDB2.execute(query)
  dataDB2.append(curDB2.fetchall())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...