python - 如何创建以列表为参数的 SELECT 语句?

标签 python sqlite python-2.6

代码

以下代码仅在列表 targets_in_sw 时有效它只有一个值:

sw_current = cursor.execute("SELECT * from SOFTWARE_")
sw_current = sw_current.fetchall()
for sw_item in sw_current:
    current_software_id = sw_item[0]
    # Create Software XML Element
    sw_element = ET.SubElement(root, "Software")
    # Get all Targets for current sw_element
    targets_in_sw = cursor.execute("SELECT TARGET2 from SOFTWARE_TARGET_ WHERE SOFTWARE1=?", (current_software_id,))
    targets_in_software = targets_in_sw.fetchall()
    targets_in_software = list(chain.from_iterable(targets_in_sw))
    # Get all Target IDs for current sw_element
    current_target_IDs = cursor.execute("SELECT * from TARGET_ WHERE id_=?", targets_in_software)
    current_target_IDs = current_target_IDs.fetchall()
    ## The following line ONLY prints when my list contains one value ##
    print current_target_IDs

问题

如何更改此设置,以便我可以从 TARGET_ 中选择所有内容当targets_in_software是多个值的列表吗?

备注:

如果您没有看到标签,我正在使用 SQLite3 .

这是 targets_in_software 中的值的示例在循环时:
iteration       targets_in_software
        1       [21]
        2       [28]
        3       [29]
        4       [91]
        5       [92]
        6       [94]
        7       [217]
        8       [218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228]
        9       [251]
       10       [261]
...etc.

最佳答案

您的原始 SQL 查询应如下所示:
SELECT val FROM table_name WHERE ref_val in ('val_one','val_two');
因此,对于您的情况,您应该这样做:
targets_in_sw = cursor.execute("SELECT TARGET2 from SOFTWARE_TARGET_ WHERE SOFTWARE1=(" + ",".join(targets_in_software) + ");")
请注意,这不会保护您免受 SQL 注入(inject)。

关于python - 如何创建以列表为参数的 SELECT 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28885701/

相关文章:

python - 试图在一个类中编译内核,得到 "__init__() got an unexpected keyword argument ' kernel'”错误

python - python sqlite3库是否需要安装sqlite?

python - 如何获取 QComboBox 的当前文本内容?

python - Numpy - 行标准化

python - 使用字典中的键反转多个值

python - 如何更改 PyQt standardButtons_ 的文本

mysql - 对任意行列表求和

sqlite - 如何在SQLite查询中执行Shell命令?

python - 安装Scrapy for Python 2.6

python - MySQL 中存储过程链式调用的有趣行为