Была похожая проблема.Из того, что я видел, это связано с тем, что SQL Server возвращает результат создания временной таблицы как набор результатов.В зависимости от того, что делает ваш запрос, он может вернуть множество наборов результатов, а также набор, который вы хотите.Это может происходить из-за поведения sqlalchemy, которое Pandas использует под капотом.
Некоторые решения включают добавление SET NOCOUNT ON
или SET ANSI_WARNINGS OFF
в начало вашего запроса.Попробовал это, но это все равно не сработало.
В итоге получилось получить курсор из sqlalchemy и переместить курсор к требуемому набору результатов.В результате вы получите список кортежей, который затем вы можете использовать DataFrame.from_records()
для построения вашего фрейма данных.
raw_connection = db_engine.raw_connection()
try:
cursor = raw_connection.cursor()
cursor.execute(sql)
cursor.nextset()
column_names = [column[0] for column in cursor.description]
rows = cursor.fetchall() # List of tuples
cursor.close()
finally:
raw_connection.close()
# Use from_records for a list of tuples
df = pandas.DataFrame.from_records(data=rows, columns=column_names, index=None)
См .: https://docs.sqlalchemy.org/en/13/core/connections.html#multiple-result-sets и: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.from_records.html