#python-3.x #postgresql #psycopg2 #ponyorm
#python-3.x #postgresql #psycopg2 #ponyorm
Вопрос:
У меня есть следующий запрос, который содержит общее табличное выражение:
WITH example AS (
SELECT unnest(ARRAY['foo', 'bar', 'baz']) as col
)
SELECT *
FROM example
Пытаюсь использовать его в database.select(query)
бросках pony.orm.dbapiprovider.ProgrammingError: syntax error at or near "WITH"
и database.select(raw_sql(query))
бросках TypeError: expected string or bytes-like object
.
Как я могу выбрать данные, используя CTE с ponyorm?
Ответ №1:
Чтобы использовать запрос, содержащий CTE, вызовите execute
функцию в базе данных и извлеките строки с помощью возвращаемого курсора:
cursor = database.execute("""
WITH example AS (
SELECT unnest(ARRAY['foo', 'bar', 'baz']) as col
)
SELECT *
FROM example
""")
rows = cursor.fetchall()
Примечание: курсор является классом из psycopg2
, поэтому, хотя в этом решении используется библиотека pony, решение может отличаться в зависимости от используемой базы данных.