【问题标题】:Filter out if query returns nothing如果查询不返回任何内容,则过滤掉
【发布时间】:2015-05-15 13:43:34
【问题描述】:

如何过滤掉从数据库返回的结果,以便只存储实际返回的数据。

我得到以下代码:

mergedlist_uniques = [id1,id2,id3,id4,..] #list containing data

for i in range(0, 5):
    cur = db.cursor()
    cur.execute("SELECT id FROM `id_activities` WHERE `id_activities`.`id` = '" + mergedlist_uniques[i] + "' LIMIT 1")
    results = cur.fetchall()
    if results != "":
        print("empty, result is: ", results)
        #data.append(results)

在我的 if 语句中,我检查结果是否不包含任何内容,但这不起作用。

我仍然得到以下结果:

>>> ('empty, result is: ', ())

我应该期望的是,只要结果是: () 它不应该打印任何东西,但如果它包含:

>>> ('empty, result is: ', (idx))

然后它应该打印出结果。

我做错了什么?

【问题讨论】:

  • 使用查询时要小心使用结果一词,查询总是会返回结果,有些结果什么都没有
  • 啊,谢谢你的提示!我会修改它! @JeremyC。
  • 我不是 100% 了解您的查询在做什么,但我似乎得到的是您正在查询 id = id1 到 id5?并且您想打印诸如“空结果=(id5)”之类的内容,以防您的查询对id5没有返回任何内容,对吗? nvm 你已经得到了答案:p

标签: python sql


【解决方案1】:

根据Python documentationNone, 0, "", (), {}, [] 被视为False,所以使用

if results:
    #DO something

【讨论】:

    【解决方案2】:

    我认为使用filter 可以解决您的问题。

    mergedlist_uniques = filter(None, [id1,id2,id3,id4,..])
    

    这是filter 工作原理的示例:

    v = filter(None, ["foo", "", "bar"])
    

    filter之后:

    v = ['foo', 'bar']
    

    【讨论】:

      【解决方案3】:

      你也可以通过一个 SQL 查询得到你想要的一切:

      cur.execute("SELECT id FROM `id_activities` WHERE `id_activities`.`id`"
                  " in ({})".format(",".join(mergedlist_uniques))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-04-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-24
        • 2013-09-10
        相关资源
        最近更新 更多