问:如何在Python中将多个谓词传递给SQL

时间:2019-03-08 23:01:52

标签: python sql parameters

我正在使用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

我有一个数据框,其中包含三列(值属性,date1和date 2),每一列中都有一堆值。我的计划是使用for循环传递数据,并在数据框中有行的情况下运行查询多次,然后将每个结果附加回列表对象。

我正在尝试通过一个简单,简单的示例查询来实现我的目标。到目前为止,我已经能够运行包含单个parm的查询,但是很难将其扩展为三个。问题是我不知道如何在下面的查询对象引用中引用三个单独的“列”。感谢您的帮助

下面是到目前为止可以运行的测试查询:

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 :(得分:0)

这是我想出的一个解决方案,也许会对下一个人有帮助:

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())