On Fri, 4 Oct 2013 15:55:07 +0300
"Ofir Herzas" <[email protected]> wrote:

> You can create a custom field in your model and check against it:
> 
> class Plan(Base):
>     .
>     .
>     .
>     @property
>     def calculated_date(self):
>         return date(self.year, self.month, self.day)
> 
> 
> Then, in your query, use that field:
> session.query(Plan).filter(Plan.calculated_date.between(from_date,
> to_date))
> 
> Haven't checked it myself, but I guess it should work ...

Thanks, but now I receive the error:

AttributeError: 'property' object has no attribute 'between'

> 
> -----Original Message-----
> From: [email protected]
> [mailto:[email protected]] On Behalf Of Enrico Morelli
> Sent: Friday, October 04, 2013 12:07 PM
> To: [email protected]
> Subject: [sqlalchemy] Query for date between a range
> 
> Dear all,
> 
> I've a table where the date is separated in single fields, one for
> year, one for day and one for month. So I need to query for a date
> range. I search in Internet and I found the following query that
> seems to be works: SELECT *
> FROM plan
> WHERE year * 10000 + month * 100 + day BETWEEN +'20130101' AND
> '20130131';
> 
> Now I'm trying to translate to sqlalchemy, but I receive the following
> error:
> 
> DataError: (DataError) invalid input syntax for integer:
> "2013-01-01T00:00:00" LINE 3: ...year * 1000 + plan.month * 100 +
> plan.day BETWEEN '2013-01-0... ^ 'SELECT plan.data AS plan_data,
> plan.month AS plan_month, plan.instrument_id AS plan_instrument_id,
> count(plan.instrument_id) AS count_1 \nFROM plan \nWHERE plan.year *
> %(year_1)s + plan.month * %(month_1)s + plan.day BETWEEN %(param_1)s
> AND %(param_2)s AND plan.data ILIKE %(data_1)s GROUP BY plan.data,
> plan.month, plan.instrument_id ORDER BY month,
> instrument_id' {'data_1': u'%#L%', 'param_1': datetime.datetime(2013,
> 1, 1, 0, 0), 'month_1': 100, 'year_1': 1000, 'param_2':
> datetime.datetime(2013, 10, 3, 0, 0)}
> 
> 
> The latest attempt to write the correct code is the following (the
> range come from a web form using a javascript plugin):
> 
> from_date = request.POST.get('from_date', '') to_date =
> request.POST.get('to_date', '') from_date =
> datetime.strptime(from_date, '%Y-%m-%d') to_date =
> datetime.strptime(to_date, '%Y-%m-%d') if from_date.day < 10:
>    day = "0%s" % from_date.day
> else:
>    day = "%s" % from_date.day
> if from_date.month < 10:
>    month = "0%s" % from_date.month
> else:
>    month = "%s" % from_date.month
> if to_date.day < 10:
>    tday = "0%s" % to_date.day
> else:
>    tday = "%s" % to_date.day
> if to_date.month < 10:
>    tmonth = "0%s" % to_date.month
> else:
>    tmonth = "%s" % to_date.month
> fd = '%s%s%s' % (from_date.year, month, day) td = '%s%s%s' %
> (to_date.year, tmonth, tday) print fd, td results =
> Session.query(Plan.data,
> Plan.month,Plan.instrument_id,func.count(Plan.instrument_id)).filter( 
> and_((Plan.year*1000+Plan.month*100+Plan.day).between(from_date,
> to_date),  Plan.data.ilike('%%%s%%' % item),)).group_by(
>                                             Plan.data, Plan.month,
> Plan.instrument_id ).order_by('month', 'instrument_id').all()
> 
> Where I'm wrong?
> 
> Thanks to all
> --
> -------------------------------------------------------------
>   Enrico Morelli
>   System Administrator | Programmer | Web Developer
> 
>   CERM - Polo Scientifico
>   Via Sacconi, 6 - 50019 Sesto Fiorentino (FI) - ITALY
>   phone: +39 055 457 4269
>   fax:   +39 055 457 4253
> -------------------------------------------------------------
> 
> --
> You received this message because you are subscribed to the Google
> Groups "sqlalchemy" group.
> To unsubscribe from this group and stop receiving emails from it,
> send an email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at http://groups.google.com/group/sqlalchemy.
> For more options, visit https://groups.google.com/groups/opt_out.
> 


-- 
-------------------------------------------------------------
  Enrico Morelli
  System Administrator | Programmer | Web Developer

  CERM - Polo Scientifico
  Via Sacconi, 6 - 50019 Sesto Fiorentino (FI) - ITALY
  phone: +39 055 457 4269
  fax:   +39 055 457 4253
-------------------------------------------------------------

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to