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

6.1 KiB

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:

    cd QueryBuilder
    pip install -r requirements.txt
    
  2. Umgebungsvariablen konfigurieren:

    # .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:

    python run.py
    
  4. Im Browser öffnen:

    http://localhost:5000
    

Standard-Login

  • Benutzername: admin
  • Passwort: admin123

API-Endpunkte

Gespeicherte Queries abrufen

# 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

-- 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

# 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

# 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