SQLite游标返回不同的值

时间:2016-05-10 23:34:30

标签: python-2.7 sqlite

我会尽量做到尽可能明确。我是Db的新人。

OS = Windows 7
Python ver = 2.7.10
SQLite ver = 3.8.11.1

我在SQLite DB中有以下表格:

CREATE TABLE job_logs(ID INTEGER PRIMARY KEY, eventcount INTEGER NOT NULL,
                      content TEXT, timestamp CHAR(25) NO NULL);

表格如下:

1 | 1 | blabblablabla..blab | Mon May 15 07:22:59 2006
1 | 2 | blabblablabla..blab | Mon May 15 09:22:30 2006
...
2 | 1 | blabblablabla..blab | Mon May 20 07:22:59 2006
2 | 2 | blabblablabla..blab | Mon May 21 09:26:00 2006
..

我想检索ID = 301的第一个和最后一个eventcount的时间戳。

在sqlite3 shell中,我输入了以下查询,并得到了正确的值:

sqlite>SELECT ID, min(eventcount), timestamp FROM job_logs WHERE ID = 301;
301|1| Mon May 15 07:22:59 2006
sqlite>SELECT ID, max(eventcount), timestamp FROM job_logs WHERE ID = 301;
301|52| Mon Jun  5 16:04:12 2006

确定。所以我写了下面的python脚本,但是没有得到相同的结果:

import sqlite3
db_dir = <db location>
db = sqlite3.connect(db_dir)

cursor = db.cursor()
cursor.execute("SELECT ID, min(eventcount), timestamp FROM job_logs WHERE ID = 301;")
min = cursor.fetchone()
print min
(301, 1, u'Mon Jun  5 16:04:12 2006')

cursor.execute("SELECT ID, max(eventcount), timestamp FROM job_logs WHERE ID = 301;")
max = cursor.fetchone()
print max
(301, 52, u'Mon Jun  5 16:04:12 2006')

正如您所看到的,两个查询返回的时间戳值都是max(eventcount),这就是问题所在。

这是我第一次看到这种行为。请注意,eventcount值是正确的,只有timestamp值是错误的。我验证了数据库,一切似乎都很好,如果我在SQLite shell上运行查询,db会给我正确的结果。

另外,我尝试了这个查询,但结果相同:

cursor.execute("SELECT ID, min(eventcount), timestamp FROM job_logs WHERE ID = 301 GROUP BY ID;")

0 个答案:

没有答案