python - 问:如何在 Python 中将多个谓词传递给 SQL
问题描述
我正在使用 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 循环传递数据并运行查询的次数与数据框中的行数一样多,然后将每个结果附加回列表对象。
我正在尝试通过一个适度、简单的示例查询来实现我的目标。到目前为止,我已经能够运行一个包含单个 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())
解决方案
这是我想出的一个解决方案,也许它会帮助下一个人:
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())
推荐阅读
- c++ - C++中栈的实现问题
- c# - 如何在不使用 C# 按住 CTRL 键的情况下选择 UI 网格中的多行?
- go - 如何将私钥添加到证书
- go - Converting byte array to hex format
- java - 在 tableView 中显示列
- deep-learning - AttributeError:模块“common”没有属性“allocate_buffers”
- r - Shiny app can't access data if runApp is run from a .Rprofile
- javascript - 如何创建内容下拉菜单栏?
- php - upload image and store it into my database
- c# - Linq 查询包含两个相邻的选择