init script
This commit is contained in:
50
init.py
Normal file
50
init.py
Normal 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
57
main.py
@@ -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?"}
|
||||||
Reference in New Issue
Block a user