首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么fetchone()[0]返回'Nonetype‘

为什么fetchone()[0]返回'Nonetype‘
EN

Stack Overflow用户
提问于 2015-05-21 05:53:45
回答 3查看 7.3K关注 0票数 3

我正在尝试存储employee表中的EmployeeID值,为了获得特定的行,我在Python上使用了以下命令:

代码语言:javascript
复制
cursor.execute("SELECT*FROM EMPLOYEE WHERE first_name = %s AND last_name = %s", (employee['firstname'],employee['lastname']))

紧接着是

代码语言:javascript
复制
employeeid=cursor.fetchone()[0]

为什么employeeid的值是Nonetype?

EN

回答 3

Stack Overflow用户

发布于 2015-05-21 06:00:38

fetchone()[0]返回None的原因几乎肯定是匹配WHERE子句的第一行的第一列有一个NULL值。

由于您只是执行SELECT *而不是提供列列表,因此第一列可以是表中的任何列。如果您特别需要employeeid列,则应该使用SELECT employeeid

另外,因为您没有使用ORDER BY,所以第一行可以是任何匹配的行。因此,请确保没有多个行与您的WHERE子句匹配(除非您希望有)。您可能有一个值为23的“好”行,以及另一个值为NULL的“坏”行。

正如StefanPochmann所指出的,也有可能是您没有找到任何行,因此您曲解了结果。如果查询不返回任何内容,则fetchone()调用将返回None,或者引发异常。在第一种情况下,您的语句将导致类似于TypeError: 'NoneType' object is not subscriptable的错误,因为cursor.fetchone()[0]实际上是在执行None[0]。在第二种情况下,fetchone本身的异常可能会在某个地方提到NoneType。在这两种情况下,employeeid都不会像您所说的那样最终得到值NoneType,但是如果您没有找到正确的位置,您可能会以某种方式说服自己它是正确的。

票数 2
EN

Stack Overflow用户

发布于 2021-03-11 06:48:13

回答在这里,click me

7

当您调用execute时,将计算和获取结果,并使用fetchone/fetchmany/fetchall来检索它们。

在本例中,查询返回单行作为结果,因此在if中调用cursor.fetchone会导致结果被提取并随后被丢弃,因此对fetchone的另一次调用将不会产生任何结果,因为指针已经超出了结果集中的唯一行。

检查数据是否存在的惯用sqlite方法是查询行,并测试其真实性-

票数 0
EN

Stack Overflow用户

发布于 2015-05-21 06:23:16

虽然您可能会看到有效行中的空值列,但我强烈怀疑您没有匹配任何行。您可以通过打印cursor.fetchone()的结果来检查是否与行匹配。我认为您没有匹配任何行,因为您将参数发送到sql的方式。将它们插入到字符串中,您需要将字符串参数引起来,如下所示:

代码语言:javascript
复制
cursor.execute("SELECT*FROM EMPLOYEE WHERE first_name = '%s' AND last_name = '%s'", (employee['firstname'],employee['lastname']))

首选选项是将它们作为sql参数传递,如下所示:

代码语言:javascript
复制
stmt = "SELECT * FROM EMPLOYEE WHERE first_name = ? AND last_name = ?"
result = cursor.execute (stmt,(employee['firstname'],employee['lastname']))
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30361050

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档