Отчет об генерировании ошибок: этот объект результата не возвращает строки. Он был закрыт автоматически.
Это может быть проблема с подключением, я устраняю устранение с помощью CHATGPT и говорит, что это, вероятно, проблема с подключением, потому что SSMS строго с тем, как температурные таблицы обрабатываются в соединении при использовании SQLalchemy и Pandas Read.sql () , но я не уверен. ```
import pandas as pd
from sqlalchemy import create_engine, text
import time
import re
from pyexcelerate import Workbook
def parse_query_blocks(query):
parts = re.split(r"--\s*sheet:\s*(.+)", query)
blocks = []
for i in range(1, len(parts), 2):
sheet_name = parts.strip()
sql_block = parts[i + 1].strip()
queries = [q.strip() for q in sql_block.split(";") if q.strip()]
blocks.append((sheet_name, queries))
return blocks
def generate_dynamic_reports(engine, sheet_query_blocks, output_file):
start_time = time.time()
all_setup_queries = []
sheet_selects = []
for sheet_name, queries in sheet_query_blocks:
final_select = None
for q in reversed(queries):
if q.strip().lower().startswith("select"):
final_select = q
break
if not final_select:
raise ValueError(f"No SELECT query found for sheet: {sheet_name}")
non_selects = [q for q in queries if q != final_select]
all_setup_queries.extend(non_selects)
sheet_selects.append((sheet_name, final_select))
wb = Workbook()
with engine.connect() as conn:
try:
if all_setup_queries:
for q in all_setup_queries:
conn.execute(text(q))
print(f"[{round(time.time() - start_time, 2)}s]
for sheet_name, select_query in sheet_selects:
print(f"[{round(time.time() - start_time, 2)}s]
df = pd.read_sql(text(select_query), conn)
df.fillna("NULL", inplace=True)
data = [df.columns.tolist()] + df.values.tolist()
wb.new_sheet(sheet_name[:31], data=data)
print(f"[{round(time.time() - start_time, 2)}s]
except Exception as e:
print(f"
raise e
wb.save(output_file)
print(f"[{round(time.time() - start_time, 2)}s]
```
Подробнее здесь: https://stackoverflow.com/questions/796 ... connection