Обсуждение: Passinf field name

Поиск
Список
Период
Сортировка

Passinf field name

От
Graeme Gemmill
Дата:

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? Thank you

p { margin-bottom: 0.25cm; line-height: 120%; }

Re: Passinf field name

От
"Jonathan S. Katz"
Дата:

On Nov 3, 2018, at 1:40 PM, Graeme Gemmill <graeme@gemmill.name> 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
Вложения