From: Anton Shishkov on
On Mar 31, 3:10 am, "D'Arcy J.M. Cain" <da...(a)druid.net> wrote:
> On Tue, 30 Mar 2010 15:46:12 -0700 (PDT)
>
> ASh <anton.shish...(a)gmail.com> wrote:
> > > >             new_start_date = "NOW() - '29 days'::INTERVAL"
> > > >             self.dyndb.orderdb.query('''update xxxx set creation_date
> > > > = %s
> > > >             where id_order = %s''', (new_start_date, "123"))
>
> > > Put single quotes around the first %s in the query.
>
> > Tried like you said, got this error:
>
> > psycopg2.ProgrammingError: syntax error at or near "NOW"
> > LINE 1: update orderdb.orders set creation_date = 'E'NOW() - ''29
> > da...
>
> Right.  I misread it.  Please show us the exact error that you get with
> the original code.
>
> --
> D'Arcy J.M. Cain <da...(a)druid.net>         |  Democracy is three wolveshttp://www.druid.net/darcy/               |  and a sheep voting on
> +1 416 425 1212     (DoD#0082)    (eNTP)   |  what's for dinner.

Error:
cursor.execute(sql, params)
File "/opt/local/lib/python2.5/site-packages/psycopg2/extras.py",
line 118, in execute
return _cursor.execute(self, query, vars, async)
psycopg2.ProgrammingError: syntax error at or near "NOW"
LINE 1: update orderdb.orders set creation_date = 'E'NOW() - ''29
da...
^
From: Anton Shishkov on
On Mar 31, 11:29 am, Michael Ricordeau <michael.ricord...(a)gmail.com>
wrote:
> Hi
>
> You cannot add 'NOW() - '29 days'::INTERVAL' as a query because cursor.execute() will try to mogrify it.
>
> You can do :
>   import datetime
>   idays = psycopg2.extensions.adapt(datetime.timedelta(days=29))
>   self.dyndb.orderdb.query('update xxxx set creation_date=(NOW() - %s) where id_order=%s', idays, "123"))
>
> Or:
>   import datetime
>   interval = datetime.datetime.now() - datetime.timedelta(days=29)
>   self.dyndb.orderdb.query('update xxxx set creation_date=%s where id_order=%s', (interval, "123"))
>   # But in this case current date/time is not evaluated from postgresql server but only from python env ... this may cause some bugs    
>
> You may also try to add an interval type with psycopg2.extensions.INTERVAL (I never played with it)
>
> Le Tue, 30 Mar 2010 17:26:51 -0400,
> Philip Semanchuk <phi...(a)semanchuk.com> a écrit :
>
>
>
>
>
> > On Mar 30, 2010, at 4:47 PM, ASh wrote:
>
> > > Hi, please help me understand why am I getting error with this query
>
> > >            new_start_date = "NOW() - '29 days'::INTERVAL"
> > >            self.dyndb.orderdb.query('''update xxxx set creation_date
> > > = %s
> > >            where id_order = %s''', (new_start_date, "123"))
>
> > > ...
> > > psycopg2.DataError: invalid input syntax for type timestamp with time
> > > zone: "NOW() - '29 days'::INTERVAL"
>
> > Hi Anton,
> > It sounds to me like the problem is with your SQL rather than with  
> > psycopg2 or Python. Try the query directly in Postgres -- does it work  
> > there? If so, then your next step should be to ask on the psycopg2  
> > mailing list that Google can find for you.
>
> > Good luck
> > Philip

thank you for good examples (bow)