Oшибка при вызове нескольких SQL запросов

Пытаюсь выгрузить данные из БД:

import pandas as pd

# connection = my connection to DB
df = pd.read_sql(sql, connection)
print(df)

script.sql

set session calendar = iso;
with cte_emp(weekstart, weekend) as 
(
    select
        min(calendar_date) as weekstart,
        max(calendar_date) as weekend
    from sys_calendar.calendar as cl
    where cl.year_of_calendar >= 2020
    or cl.calendar_date in ('2019-12-30', '2019-12-31')
    group by week_of_year, year_of_calendar
)
select * from cte

В итоге получаю ошибку:

TypeError: 'NoneType' is not iterable

Однако всё работает без первой строчки в SQL запросе.

Подскажите, как выгрузить данные, но не убираю первую строку в SQL запросе?


Ответы (1 шт):

Автор решения: MaxU

Функция pd.read_sql() ожидает на вход один единственный SQL запрос.

Т.е. один SELECT ... statement.

set session calendar = iso; - это настройка параметров сессии и не имеет ничего общего с запросом.

Попробуйте воспользоваться sqlalchemy.orm.Session:

from sqlalchemy import create_engine
from sqlalchemy.orm import Session

# an Engine, which the Session will use for connection
# resources
engine = create_engine('postgresql://scott:tiger@localhost/')

# create session and add objects
with Session(engine) as session:
    session.execute('set session calendar = iso')
    ...
→ Ссылка