我在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。任何帮助将不胜感激。
最佳答案
我相信您犯的错误是对fetchone()
的第二次调用,根据定义,该调用几乎只能在执行查询返回单行的游标上被调用一次。尝试保存结果并使用保存的值,而不是两次调用fetchone()
而不执行第二个查询。第一个调用耗尽了结果集,因此第二个调用返回None
。fetchone
返回单行,因此fetchone()[0]
为您提供该行的第一列(在此例中为唯一列)。但仅当fetchone
实际上返回一行时才行!