Re: Passinf field name

"Jonathan S. Katz" <[email protected]> Sat, 3 Nov 2018 13:47:17 -0400
Newsgroups gmane.comp.db.postgresql.sql
Message-ID <[email protected]>
> On Nov 3, 2018, at 1:40 PM, Graeme Gemmill <[email protected]> wrote:
> 
> 
> Help please: Trying to construct a query where a field name has to be passed.
> Database wbdata has a field “date timestamp with timezone”.
> cursor.execute("SELECT * FROM wbdata ORDER BY date;")
> works.
> cursor.execute("SELECT * FROM wbdata WHERE date > %s", (starttime,))
> works.
> I read in your FAQs that I have to use psycopg2.sql to pass a field name into the query, so to select a subset of wbdata where date is > startdate and the output is sorted by date, I tried
> cursor.execute(
> sql.SQL("SELECT * FROM wbdata ORDER BY %s WHERE date > %%s" % [sql.Identifier("date")], [starttime]))
> 
> which gives me an error:
> TypeError: __init__() takes 2 positional arguments but 3 were given
> What is a correct formulation please?

If you’re just trying to order by the “date” column, this should work fine:

cursor.execute("SELECT * FROM wbdata WHERE date > %s ORDER BY date", (starttime,))

Best,

Jonathan
signature.asc (application/pgp-signature, 833 B)
-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEE+oS2la8r95ogZD/x8QSccp8cZScFAlvd3yUACgkQ8QSccp8c
ZSdhkg/+PpdHsjO72ekw4rmQRKcYPHzfrX0lL3HvGgFb1RylewwNXwg3/Fh7VMQh
KL1Qe7/7wi03Qhd5Uphpta8FjUXjHGqWAbYJKsq+9vx4gSHMMMl1X0AqClasbOUe
T8qaNcCVodRD6S/iTah0kOmPNHGe920A8VE0D8fEQ4zL4x56j9Pc7j1mbnE9vOlz
+cEzh7JA9+l7+P/G2Zgvhb4f5gVdk6KRH3BxExTZhy1uwXS+EnkrkRoBhv8JRwmR
lKPuJitGFlBqLl/7VFlff40sOKxU+wHNwMkkcQUD9kvUl3VgPHWikS3rH917uWGx
eCyl/bN1wKpWPUMzti2tdjlyxk9fI1uwY8HwrCS+Ivn5MtgZnxw6cLC0NvYDgcXA
/rbCDZWBbZJp7msnyebMimH+Gk0hCBWfeYHMD0sAeBoFSpcnfV7pSc4ursFniG2m
+G7ez54JzYzpvADTizd6gAlgJAXdSOfoBSLbE68WH4j8rNnC8eWqOWdQ//yVfElc
XVghDqZG4eW9BOB+K5kY9LAurHxXttq0QHoD3lJgklZ8hbX6hOMQCL21rF11Ix1X
nFo9w3CtPGrAJpym9zHaX/tLsoAObs09GodAGKVf2oVXpF74/ieSblFiYjmLYw8I
ByvfOqycKkY4GxRhC/lBTczYbaaGA1w7VEomt7jRmyaErIW1o6w=
=ewkV
-----END PGP SIGNATURE-----