QueryBuilder/README.md
2025-10-14 21:27:41 +02:00

213 lines
6.1 KiB
Markdown

# Query Builder - SQL Web Interface
Eine Python Flask-Webanwendung zum Ausführen und Verwalten von SQL-Queries mit einer benutzerfreundlichen Web-Oberfläche.
## Features
- **Authentifikation**: Benutzeranmeldung und -registrierung
- **Multi-Datenbank-Unterstützung**: Verbindung zu Oracle, PostgreSQL und SQLite
- **Query Builder**: Interaktive SQL-Query-Eingabe und -Ausführung
- **Tabellen-Explorer**: Anzeige aller verfügbaren Datenbanktabellen in der linken Sidebar
- **Datenbankauswahl**: Auswahl zwischen verschiedenen konfigurierten Datenbankverbindungen
- **Verbindungstest**: Test der Datenbankverbindung mit einem Klick
- **Gespeicherte Queries**: Speichern und Verwalten häufig verwendeter SQL-Queries
- **API-Zugriff**: RESTful API zum Abrufen gespeicherter Queries als JSON oder CSV
- **Export-Funktionen**: Download von Query-Ergebnissen als CSV
## Projektstruktur
```
QueryBuilder/
├── app/
│ ├── __init__.py # Flask App Initialisierung
│ ├── models.py # Datenbankmodelle (User, SavedQuery, etc.)
│ ├── routes/
│ │ ├── auth.py # Authentifikation (Login/Register)
│ │ ├── main.py # Hauptrouten (Dashboard, Query-Ausführung)
│ │ └── api.py # API-Endpunkte für Query-Export
│ ├── services/
│ │ ├── database_service.py # Datenbankverbindung und Query-Ausführung
│ │ └── database_manager.py # Multi-Datenbank-Manager
│ ├── templates/
│ │ ├── base.html # Basis-Template
│ │ ├── dashboard.html # Hauptinterface
│ │ └── auth/
│ │ ├── login.html # Login-Seite
│ │ └── register.html # Registrierungs-Seite
│ └── static/
│ ├── css/style.css # Custom CSS
│ └── js/app.js # Frontend JavaScript
├── requirements.txt # Python Dependencies
├── .env # Umgebungsvariablen
├── run.py # Anwendungsstart
└── README.md # Diese Datei
```
## Installation
1. **Repository klonen und Abhängigkeiten installieren:**
```bash
cd QueryBuilder
pip install -r requirements.txt
```
2. **Umgebungsvariablen konfigurieren:**
```bash
# .env Datei erstellen (basierend auf .env.example)
cp .env.example .env
# Dann .env anpassen mit Ihren Datenbankverbindungen:
# Flask Konfiguration
SECRET_KEY=your-secret-key-here
FLASK_ENV=development
# Oracle Datenbank (optional)
ORACLE_HOST=your-oracle-host.com
ORACLE_PORT=1521
ORACLE_SERVICE_NAME=ORCL
ORACLE_USERNAME=your_username
ORACLE_PASSWORD=your_password
# PostgreSQL Datenbank (optional)
POSTGRES_HOST=your-postgres-host.com
POSTGRES_PORT=5432
POSTGRES_DATABASE=your_database
POSTGRES_USERNAME=your_username
POSTGRES_PASSWORD=your_password
```
3. **Anwendung starten:**
```bash
python run.py
```
4. **Im Browser öffnen:**
```
http://localhost:5000
```
## Standard-Login
- **Benutzername:** admin
- **Passwort:** admin123
## API-Endpunkte
### Gespeicherte Queries abrufen
```bash
# Alle gespeicherten Queries
GET /api/queries
# Spezifische Query nach Namen
GET /api/queries/{query_name}
# Query ausführen und Ergebnisse als JSON erhalten
GET /api/queries/{query_name}/execute?connection=demo
# Query ausführen und als CSV downloaden
GET /api/queries/{query_name}/execute?format=csv&connection=oracle
# Direkte Export-Endpunkte
GET /api/queries/{query_name}/export/json
GET /api/queries/{query_name}/export/csv
```
## Verwendung
### Query Builder Interface
- **Linke Sidebar**: Zeigt alle verfügbaren Datenbanktabellen
- **Rechte Seite**: SQL-Query-Eingabefeld und Ergebnisanzeige
- **Query ausführen**: Ctrl+Enter oder "Query Ausführen" Button
- **Query speichern**: Ctrl+S oder "Query Speichern" Button
### Demo-Daten
Die Anwendung erstellt automatisch Demo-Tabellen mit Beispieldaten:
- `customers` - Kundendaten
- `orders` - Bestellungen
- `products` - Produkte
### Beispiel-Queries
```sql
-- Alle Kunden anzeigen
SELECT * FROM customers;
-- Bestellungen mit Kundeninformationen
SELECT c.name, o.product_name, o.quantity, o.price
FROM customers c
JOIN orders o ON c.id = o.customer_id;
-- Top-Städte nach Kundenanzahl
SELECT city, COUNT(*) as customer_count
FROM customers
GROUP BY city
ORDER BY customer_count DESC;
```
## Datenbankunterstützung
Die Anwendung unterstützt mehrere Datenbanktypen gleichzeitig:
### SQLite (Standard)
- Keine Konfiguration erforderlich
- Demo-Datenbank mit Beispieldaten
- Lokale `querybuilder.db` Datei
### Oracle Database
```bash
# Umgebungsvariablen in .env setzen
ORACLE_HOST=your-oracle-host.com
ORACLE_PORT=1521
ORACLE_SERVICE_NAME=ORCL
ORACLE_USERNAME=your_username
ORACLE_PASSWORD=your_password
```
### PostgreSQL
```bash
# Umgebungsvariablen in .env setzen
POSTGRES_HOST=your-postgres-host.com
POSTGRES_PORT=5432
POSTGRES_DATABASE=your_database
POSTGRES_USERNAME=your_username
POSTGRES_PASSWORD=your_password
```
### Verbindungstest
- Über das Dashboard können Sie Datenbankverbindungen testen
- Der "Verbindung testen" Button prüft die Konnektivität
- Fehlermeldungen helfen bei der Fehlerdiagnose
## Technische Details
### Backend
- **Flask**: Web-Framework
- **SQLAlchemy**: ORM für Datenbankoperationen
- **Flask-Login**: Session-Management
- **cx-Oracle/oracledb**: Oracle-Datenbanktreiber
- **psycopg2**: PostgreSQL-Datenbanktreiber
- **SQLite**: Standard-Datenbank (keine zusätzliche Installation)
### Frontend
- **Bootstrap 5**: UI-Framework
- **Font Awesome**: Icons
- **Vanilla JavaScript**: Interactive Funktionalität
### Sicherheit
- Passwort-Hashing mit Werkzeug
- CSRF-Schutz
- SQL-Injection-Schutz durch parametrisierte Queries
- Session-basierte Authentifikation
## Erweiterungsmöglichkeiten
- Mehrere Datenbankverbindungen
- Query-Syntax-Highlighting
- Autocomplete für SQL-Keywords
- Query-Performance-Analyse
- Benutzerrollen und Berechtigungen
- Query-Historie
- Dashboard mit Diagrammen
## Lizenz
MIT License