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 random import choice
|
||||
from typing import List
|
||||
|
||||
# 📝 Die Wortliste (kann beliebig erweitert werden)
|
||||
GERMAN_WORDS: List[str] = [
|
||||
"Haus", "Tisch", "Apfel", "Straße", "Flugzeug",
|
||||
"Schlüssel", "Computer", "Bibliothek", "Deutschland",
|
||||
"Flasche", "Maus", "Wolke", "Lampe", "Spiegel",
|
||||
"Kaffee", "Programmierung", "RestAPI"
|
||||
]
|
||||
# 📁 Dateiname der Datenbank
|
||||
DB_NAME = "hangman.db"
|
||||
|
||||
# 💡 Initialisiere die FastAPI-Anwendung
|
||||
app = FastAPI(
|
||||
title="German Hangman Word API",
|
||||
description="Gibt ein zufälliges deutsches Wort aus einer vordefinierten Liste zurück."
|
||||
)
|
||||
# 🛠️ Datenbank-Hilfsfunktionen
|
||||
def get_db_connection():
|
||||
"""Erstellt eine Verbindung zur SQLite-Datenbank."""
|
||||
conn = sqlite3.connect(DB_NAME)
|
||||
conn.row_factory = sqlite3.Row
|
||||
return conn
|
||||
|
||||
@app.get("/")
|
||||
def read_root():
|
||||
"""Zeigt eine Willkommensnachricht an."""
|
||||
return {"message": "Willkommen zur deutschen Zufallswort-API. Nutze /random_word"}
|
||||
# 💡 Initialisiere die FastAPI-Anwendung (ohne Lifespan/Init-Logik)
|
||||
app = FastAPI()
|
||||
|
||||
@app.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
|
||||
random_word = choice(GERMAN_WORDS)
|
||||
try:
|
||||
conn = get_db_connection()
|
||||
cursor = conn.cursor()
|
||||
|
||||
# 📤 Gib das Wort als JSON-Objekt zurück
|
||||
return {"word": random_word}
|
||||
# SQL-Magie: Wählt zufällig eine Zeile aus der Datenbank
|
||||
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
|
||||
@app.get("/word_list")
|
||||
def get_word_list():
|
||||
"""
|
||||
Gibt die vollständige Liste der verfügbaren Wörter zurück (nur zu Debugging-Zwecken).
|
||||
"""
|
||||
return {"count": len(GERMAN_WORDS), "words": GERMAN_WORDS}
|
||||
if result:
|
||||
return {"word": result["word"]}
|
||||
else:
|
||||
return {"error": "Keine Wörter in der Datenbank gefunden (Bitte init.py ausführen)."}
|
||||
|
||||
except sqlite3.OperationalError:
|
||||
# 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