【问题标题】:Multiple SQL queries containing every element in a Python list in the LIKE operator包含 LIKE 运算符中 Python 列表中每个元素的多个 SQL 查询
【发布时间】:2020-08-04 14:28:37
【问题描述】:

我正在尝试运行多个SQL queries,其中LIKE 运算符包含Python 中列表的每个元素。我有一长串字符串

l = ['string1', 'string2', 'string3',....]

query_1 = "SELECT COUNT(request) FROM table WHERE request LIKE 'l[0]' AND DATE BETWEEN 'date1' AND 'date2'".format(l[0])
query_2 = "SELECT COUNT(request) FROM table WHERE request LIKE 'l[1]' AND DATE BETWEEN 'date1' AND 'date2'".format(l[1])
query_3 = "SELECT COUNT(request) FROM table WHERE request LIKE 'l[2]' AND DATE BETWEEN 'date1' AND 'date2'".format(l[1])

等等。

如何运行多个查询然后将它们连接起来?是否可以在多个查询中使用execute 函数,或者它只能与一个查询一起使用?我会使用 for 循环吗?

编辑:在这个问题的前一个版本中,我询问了在 LIKE 运算符中运行具有多个列表元素的 ONE 查询。我意识到最终的查询是这样的:

SELECT COUNT(request) FROM table WHERE request LIKE 'l[0]' OR LIKE 'l[1]' OR LIKE 'l[2]' AND DATE BETWEEN 'date1' AND 'date2'.

这不是我需要的。

【问题讨论】:

  • 你的问题是什么?
  • 为什么要同时运行这些命令?你试过executescript光标的方法吗?
  • 对于任何混淆,我深表歉意,我编辑了问题,以便运行多个查询,然后将结果连接到一个列表中。
  • 只需运行查询并将结果附加到列表中
  • 是的,它是 python,它是逐行解释器,你只需要运行代码,然后附加两个结果。但是你应该使用格式化字符串还是占位符?

标签: python sql list iteration


【解决方案1】:

如果您不是在寻找并行执行,只需执行以下操作(伪代码

l = ['string1', 'string2', 'string3',....]

query_1 = "SELECT COUNT(request) FROM table WHERE request LIKE 'l[0]' AND DATE BETWEEN 'date1' AND 'date2'".format(l[0])
query_2 = "SELECT COUNT(request) FROM table WHERE request LIKE 'l[1]' AND DATE BETWEEN 'date1' AND 'date2'".format(l[1])
query_3 = "SELECT COUNT(request) FROM table WHERE request LIKE 'l[2]' AND DATE BETWEEN 'date1' AND 'date2'".format(l[1])
result = [] 
query_lst = [query_1 ,query_2 ,query_3]
for query in query_lst:
   temp = query.execute()
   result.append(temp) 

如果您对并行执行感兴趣 - 请参阅此示例

https://pythonprogramming.net/values-from-multiprocessing-intermediate-python-tutorial/

【讨论】:

    【解决方案2】:

    您可以将f-strings 与 for 循环一起使用

    l = ['string1', 'string2', 'string3']
    res = []
    for x in l:
        query = f"SELECT COUNT(request) FROM table WHERE request LIKE '{x}' AND DATE BETWEEN 'date1' AND 'date2'"
        cursor.execute(query)
        res.append(cursor.fetchone()[0])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多