[storm] Like on DateTime using only date
James Henstridge
james at jamesh.id.au
Tue Mar 4 02:03:11 GMT 2008
On 04/03/2008, Lutz Horn <lutz.horn at fastmail.fm> wrote:
> Hi Gustavo,
>
> Am 03.03.2008 um 17:21 schrieb Gustavo Niemeyer:
>
> >> with at DateTime property I'd like to compare only using the date
> >> part. But the like method of DateTime needs a datetime.datetime
> >> instance, not a datetime.date instance. How can I formulate the like
> >> condition to only select those records whose DateTime propery match a
> >> datetime.date instance?
> >
> > I'm not sure I understand what's the problem you're facing. The
> > DateTime indeed needs a datatime object. We may extend it to support
> > automatic conversion from date objects, but it should be fairly simple
> > to make it work as it is now.
> >
> > Can you provide some sample code that is failing, and that you're
> > having
> > trouble to make it work correctly?
>
>
>
> I've the following table in MySQL:
>
> mysql> describe screenings;
> +----------+--------------+------+-----+---------+----------------+
> | Field | Type | Null | Key | Default | Extra |
> +----------+--------------+------+-----+---------+----------------+
> | id | int(11) | | PRI | NULL | auto_increment |
> | when | datetime | YES | | NULL | |
> | movie_id | int(11) | YES | | NULL | |
> +----------+--------------+------+-----+---------+----------------+
>
> Using Strom, the corresponding model class is:
>
> class Screening(object):
> __storm_table__ = "screenings"
> id = Int(primary=True)
> when = DateTime()
>
> Now I want to find all screenings for today:
>
> s_today = [screening for screening in
> self.store.find(Screening,
> Screening.when.like(datetime.datetime.now()))]
>
> This obviously returns an empty list since to no screening happens
> exactly now. But if I use datetime.date.today() as the parameter for
> like(), I get
>
> <type 'exceptions.TypeError'> at /
> Expected datetime, found datetime.date(2008, 3, 3)
>
> How can I use find() to get all Screening instances for which the date
> part for the DateTime property equals datetime.date.today() regardless
> of the time part?
You could try something like this:
today = datetime.date.today()
start = datetime.datetime.combine(today, datetime.time(0,0))
end = start + datetime.timedelta(days=1)
results = self.store.find(
Screening, Screening.when >= start, Screening.when < end)
That is, pick all screenings that fall within the desired time interval.
James.
More information about the storm
mailing list