Использовать общее табличное выражение с помощью Pony ORM

#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, решение может отличаться в зависимости от используемой базы данных.