【问题标题】:How to check if sql query result is empty in web.py/python如何检查web.py/python中的sql查询结果是否为空
【发布时间】:2012-01-01 18:17:40
【问题描述】:

我正在开发 web.py 框架中的 Web 应用程序,需要一种方法让 web.py/python 检查 sql 查询的结果是否为空。

这是我当前的功能:

def get_hours():
    result = dbconn.query("select * from hours where date < (select max(date) from last_export) order by date DESC")
    return result

这按预期工作,但如果查询结果为空,我希望函数返回 False。我已经知道 python 无法返回可迭代对象中有多少元素(无论它是否为空,它都由 dbconn.query 返回),没有计数循环。这对我来说是行不通的,因为我不希望在返回结果之前对其进行迭代。

这是我想用这个函数实现的一个例子:

def get_hours():
    result = dbconn.query("select * from hours where date < (select max(date) from last_export) order by date DESC")

    if <result is empty/no rows/nothing to iterate>:
        return False

    else:
        return result

有什么建议吗?

【问题讨论】:

    标签: python mysql web.py


    【解决方案1】:
    def get_hours():
        result = dbconn.query("select * from hours where date < (select max(date) from last_export) order by date DESC")   
    
        if result:
            return result
        else:
            return False
    

    这里有更多详细信息的非常有趣的答案:

    https://stackoverflow.com/a/2710949/492258

    【讨论】:

    • 谢谢!正是我想要的。那么我怎么知道某个函数返回了什么? dbconn.query("myquery") 和变量 'result' 都只在解释器中打印 ,没有说明它是真还是假。
    • 这不起作用,因为即使查询没有返回任何内容,在这种情况下它仍然会进入 if 部分。所以在执行查询之前进行检查。下面回答了
    【解决方案2】:

    这是一个related (duplicate?) question,用于测试生成器是否有任何项目,其中包含一些解决此限制的建议。据我所知,Python 没有简单的方法来测试迭代器是否为空。

    【讨论】:

      【解决方案3】:

      试试这个:

      def get_hours():
          check = False
          results = dbconn.query("select * from hours where date < (select max(date) from last_export) order by date DESC") 
          for result in results:
              check = True
              #Do stuff here
          if check == False:
              return false #query returned nothing  
      

      【讨论】:

        【解决方案4】:

        对于 MySQL Python:

        data = self.cur.fetchall()
        
        if len(data) == 0:
           self.statusbar.showMessage(" NoRecord her")
        else:
           print("avaiable recored")
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-11-13
          • 2018-12-13
          • 2014-02-11
          • 1970-01-01
          • 2013-05-09
          • 2014-04-13
          相关资源
          最近更新 更多