我在fetchone()
lib对象sqlite3
上遇到connect
函数问题:
fetchone()[0]
; 执行代码:
conn = sqlite3.connect(sqlite_file)
c = conn.cursor()
c.execute("SELECT average from logs WHERE process = (?)", (process,))
print c.fetchone()
print "\n"
if c.fetchone() is not None:
lastaverage = c.fetchone()[0]
print lastaverage
print average
if average > lastaverage * 1.3:
print "The process took too long to execute."
else:
lastaverage = 0
print "Script entered here!!"
这是我的输出:
Script entered here!!
(u'0',)
Script entered here!!
(u'200',)
Script entered here!!
None
Script entered here!!
(u'0',)
Traceback (most recent call last):
File "script.py", line 87, in <module>
lastaverage = c.fetchone()[0]
TypeError: 'NoneType' object is unsubscriptable
从我搜索的内容来看,如果我尝试lastaverage = None[0]
这是有意义的,就会发生同样的错误。但是,只有在c.fetchone()
返回值时才执行此行。
使用if c.fetchone()[0] is not None:
会返回相同的错误,但是在if行上!这似乎是一个线索,但我不知道到底是什么。我也尝试使用if c.fetchone()[0]:
而不是is not None
条件,但行为是相同的。
我的python版本是2.6.6。任何帮助将不胜感激。
答案 0 :(得分:2)
我相信你犯的错误是对fetchone()
的第二次调用,几乎按定义只能在执行返回单行查询的游标上调用一次。尝试保存结果并使用保存的值,而不是在不执行第二个查询的情况下调用fetchone()
两次。第一个调用耗尽了结果集,因此第二个调用返回None
。
fetchone
会返回一行,因此fetchone()[0]
会为您提供该行的第一行(在本例中为唯一的)。但只有当fetchone
实际返回一行时才会出现!