【问题标题】:How can I solve the following result?如何解决以下结果?
【发布时间】:2011-12-10 05:33:00
【问题描述】:

我已经编写了从 SQL 中进行选择并返回值的脚本,并且该脚本使用“code = code + 1”方法来制作选择的条件。

但有时条件不存在,我该如何处理?

这里是实际的脚本部分:

SQL.execute("SELECT CodePro FROM Table WHERE CodeID = ?", x)
CodePro = SQL.fetchone()[0]

但是当没有返回值时,会打印跟随错误

TypeError: 'NoneType' 对象不可下标

【问题讨论】:

    标签: python sql windows pyodbc


    【解决方案1】:

    无论您使用什么库来执行 SQL 语句,都应该有一种方法来区分空结果集和具有一行或多行的结果集。检查tutorial for pyodbc。这样的事情会起作用:

    SQL.execute("SELECT CodePro FROM Table WHERE CodeID = ?", x)
    row = SQL.fetchone()
    if row:                        # check if there was at least one row returned
        CodePro = row[0]
    

    【讨论】:

      【解决方案2】:
      SQL.execute("SELECT CodePro FROM Table WHERE CodeID = ?", x)
      try:
          CodePro = SQL.fetchone()[0]
      except:
          # Your exit here
          break
      

      【讨论】:

        【解决方案3】:

        也许你可以修改 SQL 以避免 Null 结果。

        比如在 SQLServer 中,使用这个:

        SELECT COALESCE(CodePro,-1) FROM Table WHERE CodeID = ?
        

        如果 CodePro 为 Null,它将返回 -1。

        要了解有关 COALESCE 的更多信息: http://msdn.microsoft.com/en-us/library/aa258244(v=sql.80).aspx

        【讨论】:

        • 是的,但是一行带有NULL 的结果集与空结果集不同。
        【解决方案4】:

        一种选择是用 try/except 包围它,并让“except”将 CodePro 设置为一个值,让您知道它没有找到任何东西(例如:-1)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-05-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-07-04
          • 2014-05-03
          相关资源
          最近更新 更多