SQL To Excel Report Generation Application funktioniert nicht mit einer Serververbindung [geschlossen]Python

Python-Programme
Anonymous
 SQL To Excel Report Generation Application funktioniert nicht mit einer Serververbindung [geschlossen]

Post by Anonymous »

Ich arbeite an einem SQL, um den Excel -Berichtsgenerator zu erzielen. Das Frontend ist stromloziert, und wie sie funktioniert, fügen Sie Ihre Abfrage in das Abfragungsfeld auf Streamlit mit einem Header -Header ein, führen die Abfrage aus und generieren eine Excel -Arbeitsmappe mit Blatt1. Sie können mehrere Abfragen in mehreren Blöcken haben, aber das Problem besteht darin, dass ich mit komplexen Abfragen arbeite, und die Abfragen umfassen normalerweise eine Reihe von Tempentabellen, und dann werden Daten aus diesen Temperaturtabellen in die Excel -Tabelle extrahiert. Mein Code funktioniert auf localhost in Microsoft SQL Server Management Studio 18, aber sobald ich eine Verbindung zu einem Server herstellt, gibt meine App einen Fehler zurück, in dem es heißt: < /p>

Fehlergenerierung Bericht: Dieses Ergebnisobjekt gibt keine Zeilen zurück. Es wurde automatisch geschlossen.

Code: Select all

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[i].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] ✅ Executed all setup                        queries")

for sheet_name, select_query in sheet_selects:
print(f"[{round(time.time() - start_time, 2)}s] 🔍 Running SELECT for: {sheet_name}")
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] 📄 Wrote sheet: {sheet_name} ({len(df)} rows)")

except Exception as e:
print(f"❌ Error generating report: {e}")
raise e

wb.save(output_file)
print(f"[{round(time.time() - start_time, 2)}s] ✅ All sheets exported to {output_file}")
< /code>
Bearbeiten: < /p>
Ich kann die von mir verwendete Abfrage teilen. Leider kann ich den Fehler derzeit nicht replizieren, da ich keine Berechtigungen zur Verbindung zu der SQL Server -Umgebung habe, in der das [url=viewtopic.php?t=26065]Problem[/url] ursprünglich aufgetreten ist. Wenn ich die gleiche Abfrage lokal auf localhost \ sqlexpress ausführe, funktioniert es perfekt-keine Fehler und die Tabellenkalkulationsausgabe wird korrekt erzeugt.
--sheet: s1
DROP TABLE IF EXISTS #temp_orders;
DROP TABLE IF EXISTS #temp_discounts;
DROP TABLE IF EXISTS #temp_customers;

SELECT TOP 1000
item_id,
Customer_ID,
increment_id,
price,
grand_total,
discount_amount,
payment_method,
category_name_1,
created_at,
FY
INTO #temp_orders
FROM [Kaggletest].[dbo].[test_table]
WHERE ISNUMERIC(price) = 1 AND ISNUMERIC(grand_total) = 1;

SELECT
item_id,
Customer_ID,
increment_id,
discount_amount,
price
INTO #temp_discounts
FROM #temp_orders
WHERE discount_amount > 0;

SELECT
Customer_ID,
COUNT(*) AS total_orders,
SUM(grand_total) AS total_spent,
AVG(price) AS avg_price
INTO #temp_customers
FROM #temp_orders
GROUP BY Customer_ID;

SELECT * FROM #temp_orders;

--sheet: s2
SELECT * FROM #temp_discounts;

--sheet: s3
SELECT * FROM #temp_customers;

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post