Doing database queries on datetime.datetime fields seems broken. Here's an example:
I have a database with a table 'transEntry' which includes a 'datetime' field: db.define_table('itemEntry', * Field('dateTime','datetime'),* Field('upc', 'string'), Field('description', 'string'), Field('storeNumber', 'integer'), Field('terminalNumber', 'integer'), Field('transactionNumber', 'integer'), Field('operatorNumber', 'integer'), Field('quantity', 'integer'), Field('price', 'double'), Field('action', 'integer'), Field('sequenceNumber', 'integer')) I do a search based on other fields, and it works fine: first_search = db((db.transEntry.storeNumber==store_num) & (db.transEntry.terminalNumber==lane_num)).select(orderby=db.transEntry.dateTime) len(first_search) >> 5213 Let's look at one of the results: In [173]: ex = first_search[524].dateTime In [174]: ex Out[174]: datetime.datetime(2010, 12, 11, 17, 50, 55) Now try to find a subset of the original query, entries antecedent to ex : In [183]: broken_search = db( (db.transEntry.dateTime < ex) & (db.transEntry.storeNumber==store_num) & (db.transEntry.terminalNumber==lane_num) ).select( orderby=db.transEntry.dateTime) In [184]: len(gar2) Out[184]: 270 ?? Why are there only 270, we were expecting 523 of them?? Let's take a closer look: In [186]: gar2[1].dateTime Out[186]: datetime.datetime(2010, 12, 10, 10, 55, 39) In [187]: gar2[2].dateTime Out[187]: datetime.datetime(2010, 12, 10, 10, 56, 19) In [189]: gar2[269].dateTime *Out[189]: datetime.datetime(2010, 12, 10, 22, 40, 26)* In [190]: ex Out[190]: datetime.datetime(*2010, 12, 11, 17, 50, 55*) ?? For some reason, the closest result found is almost 24 hours away from 'ex' ?? *?? Why didn't it find this one :* In [191]: *gar[523].dateTime* Out[191]: *datetime.datetime(2010, 12, 11, 17, 49, 37)* I can't understand what's happening! It seems that comparisons of datetime fields in db queries just don't work correctly? If anyone can explain/fix this, it will be much appreciated!! Thanks! Luis.