init script

This commit is contained in:
2025-11-19 14:13:31 +01:00
parent 964cf3ba36
commit 37202aa2aa
2 changed files with 79 additions and 32 deletions

50
init.py Normal file
View File

@@ -0,0 +1,50 @@
import sqlite3
# 📁 Dateiname der Datenbank
DB_NAME = "hangman.db"
# 📝 Die Wortliste
INITIAL_WORDS = [
"Haus", "Tisch", "Apfel", "Straße", "Flugzeug",
"Schlüssel", "Computer", "Bibliothek", "Deutschland",
"Flasche", "Maus", "Wolke", "Lampe", "Spiegel",
"Kaffee", "Programmierung", "RestAPI"
]
def init_db():
"""Erstellt die Tabelle und füllt sie mit Startdaten."""
print(f"🔌 Verbinde zu {DB_NAME}...")
conn = sqlite3.connect(DB_NAME)
cursor = conn.cursor()
# Tabelle erstellen
cursor.execute('''
CREATE TABLE IF NOT EXISTS words (
id INTEGER PRIMARY KEY AUTOINCREMENT,
word TEXT NOT NULL UNIQUE
)
''')
# Prüfen, ob Daten da sind
cursor.execute('SELECT count(*) FROM words')
count = cursor.fetchone()[0]
if count == 0:
print("📥 Datenbank leer. Fülle mit Startdaten...")
inserted_count = 0
for word in INITIAL_WORDS:
try:
cursor.execute('INSERT INTO words (word) VALUES (?)', (word,))
inserted_count += 1
except sqlite3.IntegrityError:
pass
conn.commit()
print(f"{inserted_count} Wörter erfolgreich hinzugefügt.")
else:
print(f" Datenbank enthält bereits {count} Wörter. Keine Änderungen vorgenommen.")
conn.close()
print("🏁 Initialisierung abgeschlossen.")
if __name__ == "__main__":
init_db()

57
main.py
View File

@@ -1,41 +1,38 @@
import sqlite3
from fastapi import FastAPI from fastapi import FastAPI
from random import choice
from typing import List
# 📝 Die Wortliste (kann beliebig erweitert werden) # 📁 Dateiname der Datenbank
GERMAN_WORDS: List[str] = [ DB_NAME = "hangman.db"
"Haus", "Tisch", "Apfel", "Straße", "Flugzeug",
"Schlüssel", "Computer", "Bibliothek", "Deutschland",
"Flasche", "Maus", "Wolke", "Lampe", "Spiegel",
"Kaffee", "Programmierung", "RestAPI"
]
# 💡 Initialisiere die FastAPI-Anwendung # 🛠️ Datenbank-Hilfsfunktionen
app = FastAPI( def get_db_connection():
title="German Hangman Word API", """Erstellt eine Verbindung zur SQLite-Datenbank."""
description="Gibt ein zufälliges deutsches Wort aus einer vordefinierten Liste zurück." conn = sqlite3.connect(DB_NAME)
) conn.row_factory = sqlite3.Row
return conn
@app.get("/") # 💡 Initialisiere die FastAPI-Anwendung (ohne Lifespan/Init-Logik)
def read_root(): app = FastAPI()
"""Zeigt eine Willkommensnachricht an."""
return {"message": "Willkommen zur deutschen Zufallswort-API. Nutze /random_word"}
@app.get("/random_word") @app.get("/random_word")
def get_random_word(): def get_random_word():
""" """
Gibt ein einzelnes, zufällig ausgewähltes deutsches Wort zurück. Holt ein zufälliges Wort direkt aus der SQL-Datenbank.
""" """
# 🎲 Wähle ein zufälliges Wort aus der Liste try:
random_word = choice(GERMAN_WORDS) conn = get_db_connection()
cursor = conn.cursor()
# 📤 Gib das Wort als JSON-Objekt zurück # SQL-Magie: Wählt zufällig eine Zeile aus der Datenbank
return {"word": random_word} cursor.execute('SELECT word FROM words ORDER BY RANDOM() LIMIT 1')
result = cursor.fetchone()
conn.close()
# OPTIONAL: Ein Endpunkt, der die gesamte Wortliste zurückgibt if result:
@app.get("/word_list") return {"word": result["word"]}
def get_word_list(): else:
""" return {"error": "Keine Wörter in der Datenbank gefunden (Bitte init.py ausführen)."}
Gibt die vollständige Liste der verfügbaren Wörter zurück (nur zu Debugging-Zwecken).
""" except sqlite3.OperationalError:
return {"count": len(GERMAN_WORDS), "words": GERMAN_WORDS} # Fängt den Fall ab, dass die Tabelle noch nicht existiert
return {"error": "Datenbankfehler: Wurde init.py ausgeführt?"}