pydal has year, month, day, hour minutes. Anyway, for relational databases, doing a compare like that is asking them to calculate the date part for each "created_on" cell (everything on the "left side" shouldn't be a result of a function, that's database tuning 101)
This because the database would need a complete full scan on the table (any index would be disregarded).
It's so much better (and rather easy) that you ask for an "in between" of fixed values wherever you can. And the query would be a zillion time faster.