by Anonymous » 11 Jul 2025, 10:58
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;
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 [url=viewtopic.php?t=26065]Problem[/url] 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]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;
[/code]