fetchall()没有在SQLite上处理某些记录

时间:2014-03-05 11:29:02

标签: python sqlite

我有一些数据存储在SQLite数据库和一个应该检索它们的Python程序中。用户输入两个日期(例如01/01/2010 - 01/01/2013),程序应对从2010年1月1日到2013年1月1日的数据进行一些分析。 代码检索数据的方式如下:

con = lite.connect("data.db")
cur = con.cursor()

cur.execute('SELECT ROWID from Table WHERE Date IS "01/01/2010"')
rowDate1 = cur.fetchall()

cur.execute('SELECT ROWID from Table WHERE Date IS "01/01/2013"')
rowDate2 = cur.fetchall()

两个变量rowDate1rowDate2是用于执行SQL语句的低级和高级极值,它将返回将在Python程序中使用的值。 基本上,如果我想在01/01/2010 - 01/01/2013期间运行我的分析,变量rowDate1rowDate2将包含要用于数据检索的行ID。

因此,在某个特定日期之前,特别是01/01/2010,变量rowDate1将使用以下示例输出返回rowID号:

rowDate1 == [(6002,)]

2010年1月1日之后,cur.fetchall()的返回为空:rowDate1 = [] 我已将数据检入数据库并且它们存在,它们的行ID与其他行完全相同。 此外,如果数据不存在,那么即使变量rowDate2也应返回空值,但情况并非如此。 事实上,如果我执行:

cur.execute('SELECT ROWID from Table WHERE Date IS "01/01/2012"')
rowDate1 = cur.fetchall()
rowDate2 = cur.fetchall()
print rowDate1, rowDate2 

我会得到以下输出:

[] [(6002,)]

我知道,这很荒谬,但我真的不明白这是怎么发生的。 我担心这是代码的错误,我真的不知道。有没有人知道我怎样才能检测它,它可能依赖什么?

注意:我可以发布关于代码剩余部分的更多信息。完全相同的陈述适用于变量rowDate2的归属,而不是变量rowDate1;我的意思是,如果我从GUI输入日期框架“01/01/2012 - 01/01/2012”,变量rowDate1将没有值,而变量rowDate2将。但这很奇怪,因为它们是相同的陈述,只是rowDate1之前执行了!?

完整代码

con = None  
con = lite.connect(dPath.adresseBDD + '/' + symb + '.db')                 
cur = con.cursor()    

cur.execute('SELECT ROWID from ' + frequence + ' WHERE Date IS "' + date1+'"' )                 
rowDate1= cur.fetchall() 

cur.execute('SELECT ROWID from ' + frequence + ' WHERE Date IS "' + date2+'"' ) 
rowDate2= cur.fetchall() 

0 个答案:

没有答案