Helpers - компьютеры, интернет, программирование

Ошибка Python Pandas read_sql_query «Объект NoneType не является итерируемым»

Я пытаюсь выполнить sql и сохранить результат в Panda Dataframe. вот мой код.

        dbserver = 'validserver'
        filename = 'myquery.sql'
        database  ='validdb'       
        conn = pyodbc.connect(r'Driver={SQL Server};Server=' + dbserver + 
            ';Database=' + database + ';Trusted_Connection=yes;')
        fd = open(filename, 'r')
        resultingData = pd.read_sql_query(fd.read(),conn)
        fd.close()
        conn.close()

строка pd.read_sql_query(fd.read(),conn) продолжает выдавать ошибку «Объект NoneType не является итерируемым».

Я могу запустить myquery.sql в окне сервера sql с результатами. у меня есть SET NOCOUNT ON;

Любая подсказка, что мне здесь не хватает, и как мне это отладить? myquery.sql имеет несколько таблиц #temp и объединений. Результат содержит около 75 тыс. строк. Спасибо всем.

Обновление:

Я не могу опубликовать точный запрос, но так выглядит запрос.

SET NOCOUNT ON;

SELECT SourceID, PeriodEndDate = MAX(PeriodEndDate)
INTO #SourceDate 
FROM table1
WHERE PERIODENDDATE <= 20171229
GROUP BY SourceID

SELECT RS.*, R.TypeCode INTO #final
FROM table2 RS
INNER JOIN #SourceDate SD ON SD.id = RS.id
INNER JOIN table3 R ON R.id = RS.id

select * from #final
16.01.2018

  • Пожалуйста, покажите содержимое myquery.sql. В read_sql() следует передавать только отдельные операторы SQL SELECT. 16.01.2018
  • @Parfait Я обновил свой вопрос запросом. 16.01.2018
  • Можете ли вы изменить сценарий .sql? 16.01.2018

Ответы:


1

Насколько я понимаю, read_sql_query() в любом случае вернет результаты только из вашего первого оператора. В этом случае это SET NOCOUNT ON; и, как вы можете видеть, вернет None, поэтому ваш код не удался. IMO Вы должны оптимизировать свой оператор SQL, чтобы возвращать одну таблицу вместо нескольких в процессе (поскольку я полагаю, что вы хотите читать только из #final).

Если вы действительно хотите иметь несколько запросов sql в кадре данных, вы можете использовать lists и split, как указано в этой теме:

запрос Pandas read_sql с множественным выбором

16.01.2018
  • Спасибо. Я попробую ваше предложение. 17.01.2018
  • Я преобразовал свой запрос в хранимую процедуру и смог вызвать его с помощью read_sql_query(). 17.01.2018

  • 2

    Как упоминалось в @r.ook, используйте SET NOCOUNT ON; для каждого оператора, возвращающего NoneType. Итак, ваше утверждение может быть:

    SET NOCOUNT ON;
    SELECT SourceID, PeriodEndDate = MAX(PeriodEndDate)
    INTO #SourceDate 
    FROM table1
    WHERE PERIODENDDATE <= 20171229
    GROUP BY SourceID
    
    SET NOCOUNT ON; --Added "SET NOCOUNT ON;" here as well.
    SELECT RS.*, R.TypeCode INTO #final
    FROM table2 RS
    INNER JOIN #SourceDate SD ON SD.id = RS.id
    INNER JOIN table3 R ON R.id = RS.id
    
    select * from #final
    

    Вы также можете проверить эту ссылку, чтобы получить дополнительные сведения.

    06.07.2021
    Новые материалы

    Интуитивное понимание тензоров в машинном обучении
    Тензор является важной концепцией во многих научных областях, таких как математика, физика, обработка сигналов и компьютерное зрение, и это лишь некоторые из них. В математике тензор — это..

    Использование машинного обучения для диагностики болезни Альцгеймера, часть 4
    Маркеры семантической согласованности для ранней диагностики болезни Альцгеймера (arXiv) Автор: Давиде Колла , Маттео Дельсанто , Марко Агосто , Бенедетто Витиелло , Даниэле Паоло Радичони..

    Почему объяснимость так важна прямо сейчас?
    По мере того, как системы искусственного интеллекта и инструменты на основе машинного обучения распространяются в нашей повседневной жизни, как практики, так и критики все чаще заявляют о..

    Анимированный математический анализ
    Использование Manim для создания математических анимированных визуализаций Визуализация данных помогает понять скрытые закономерности в данных, которые невозможно визуализировать..

    Создание простого слайдера изображений с помощью JavaScript
    Узнайте, как создать базовый слайдер изображений с помощью HTML, CSS и JavaScript. Введение В этом уроке мы создадим удобный слайдер изображений, используя JavaScript, HTML и CSS. Ползунок..

    Создание базы данных с помощью супергероя «Python»
    В этом посте мы узнаем, как создать «базу данных SQLite с помощью модуля python sqlite3, создав простую функцию входа и регистрации. Готовы ли вы к этому путешествию? Если да , давайте приступим..

    ИИ для чайников: руководство для начинающих по пониманию будущего технологий
    Вы чувствуете, что остались позади в мире ИИ? Не волнуйтесь, вы не одиноки! Со всей этой шумихой вокруг искусственного интеллекта может быть трудно понять, с чего начать. Но не позволяйте сленгу..