我有一些数据存储在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()
两个变量rowDate1
和rowDate2
是用于执行SQL语句的低级和高级极值,它将返回将在Python程序中使用的值。
基本上,如果我想在01/01/2010 - 01/01/2013期间运行我的分析,变量rowDate1
和rowDate2
将包含要用于数据检索的行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()