从sqlite3检索时间戳后,大小为0的列表,包含2个元素

问题描述 投票:0回答:1
con = sqlite3.connect(db_path,isolation_level=None, detect_types=sqlite3.PARSE_DECLTYPES)

cur.execute('SELECT TIMESTAMPSTART,COUNT from COUNTING order by ROWID DESC limit 1;')
print(cur.fetchall())
last_d=cur.fetchall()
print(type(last_d))
print(len(last_d))
print(last_d[0])

此代码的结果如下:

[(datetime.datetime(2019, 4, 8, 21, 49, 5, 675964), 2)]
<type 'list'>
0
Traceback (most recent call last):
  File "avg.py", line 70, in <module>
    stream.statuses.filter(track='bitcoin')
  File "/usr/lib/python2.7/site-packages/twython/streaming/types.py", line 67, in filter
    self.streamer._request(url, 'POST', params=params)
  File "/usr/lib/python2.7/site-packages/twython/streaming/api.py", line 154, in _request
    if self.on_success(data):  # pragma: no cover
  File "avg.py", line 59, in on_success
    update_counter()
  File "avg.py", line 38, in update_counter
    print(last_d[0])
IndexError: list index out of range

我的数据库看起来像这样:

CREATE TABLE COUNTING(
ID INTEGER PRIMARY KEY AUTOINCREMENT,
COUNT INT NOT NULL,
KEYWORD TEXT NOT NULL,
TIMESTAMPSTART TIMESTAMP NOT NULL,
TYPE TEXT NOT NULL
);

那么为什么它表示列表的大小为0,尽管我打印它时它有2个元素?我只是想从db中检索我的时间戳

python twitter sqlite scripting
1个回答
1
投票

那是因为你没有返回任何结果。注意下面代码的作用。你有:

print(cur.fetchall())
last_d=cur.fetchall()

print语句获取所有不留行的行,以便您实际将last_d变量设置为。根据here,当没有可用行时返回一个空列表。你的print函数消耗了所有的行,没有为实际变量存储,因此它返回它的长度为0。删除print语句,看看会发生什么。

© www.soinside.com 2019 - 2024. All rights reserved.