Looks like I solved the problem. The issue was the order of the 
 expressions to the DAL query. When you have an expression that involves 
 fields from one or more tables and some arithmetic a field must be the 
first in the expression. here is an example that works:

lowLimit=10
otherLimit=40
offset=20
otherOffset
rows=db((db.sometable.check_time.epoch()+Offset>lowLimit)& 
(db.sometable.check_time.epoch()+otherLimit=<=otherOffset)& \
    (db.sometable.place==db.othertable.id) & \
    
(db.othertable.order_time.epoch()<db.sometable.period*(-60)+ otherLimit) \
    ).select()    
   
All the expressions that involves fields and math the field comes first
Here above:  db.sometable.period*(-60)+ otherLimit works while:   
otherLimit-db.sometable.period*60
Does not work 




On Tuesday, June 23, 2015 at 5:43:01 PM UTC+2, icodk wrote:
>
> Hi all
> I have a time field check_time that i want to check every day (ex. 13:40) 
> and then do something if
> the check_time is close to the time I run the query. In other words I run 
> the query every 10 minutes and want to select all the checkpoint records 
> that
> their check_time is max 5 minutes (300 sec.) earlier then my current time
>
> db.define_table('checkpoint',
> Field('name')
> Field('check_time','time')
> )
>
> Because  the query might involve crossing midnight I need to to fix the 
> check_time to a date of the current date
> by adding the number of seconds from the beginning of the universe and 
> then compering it to the current time in the query,
> all converted to seconds.
>
> First I get the number of seconds from the beginning of the universe to 
> the beginning of today:
>
> 1. beginning of the universe:
> epochstart = datetime.datetime.fromtimestamp(0) 
> 2. beginning of today in seconds:
> # convert today to a datetime so it can be used in a delta
>     dnow=datetime.datetime.now().date()
> todaystart=datetime.datetime(dnow.year, dnow.month, dnow.day, 0, 0) # 
> datetime of beginning of today
> todayseconds=(todaystart-epochstart).total_seconds()
> 3. get the seconds of the current time:
> now = datetime.datetime.now()
> nowseconds=(now-epochstart).total_seconds()
>
>
> 4. Now we have everything needed for the query and I try to 'fix' the 
> check_time to be comparable to the current time that might span a day limit 
> (because of the -300)
>
>
> rows=db((todayseconds+db.checkpoint.check_time.epoch()>(nowseconds-300)&(todayseconds+db.checkpoint.check_time.epoch()<=nowseconds))).select()
>
> 5. The problem is that the DAL will not take the: 
> todayseconds+db.checkpoint.check_time.epoch() expression. 
> TypeError: unsupported operand type(s) for +: 'int' and 'Expression'
>
>
> An alternative can be to 'fix' the current time to the number of seconds 
> from the beginning of today and if the nowseconds-300 <0 then to add 86400
> and to use this number instead of the low limit: nowseconds-300
>
> Hope for better ideas
>

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to