humbleParser/check_db.py

78 lines
2.5 KiB
Python

#!/usr/bin/env python3
import sqlite3
import sys
def list_tables(conn):
"""Gibt eine Liste aller Tabellennamen in der Datenbank zurück."""
cursor = conn.cursor()
cursor.execute("SELECT name FROM sqlite_master WHERE type='table';")
tables = [row[0] for row in cursor.fetchall()]
return tables
def count_entries(conn, table_name):
"""Gibt die Anzahl der Einträge in der angegebenen Tabelle zurück."""
cursor = conn.cursor()
try:
cursor.execute(f"SELECT COUNT(*) FROM {table_name}")
count = cursor.fetchone()[0]
except Exception as e:
count = None
print(f"Fehler beim Zählen der Einträge in {table_name}: {e}")
return count
def print_table_contents(conn, table_name):
"""Gibt den kompletten Inhalt der angegebenen Tabelle aus."""
cursor = conn.cursor()
try:
cursor.execute(f"SELECT * FROM {table_name}")
except Exception as e:
print(f"Fehler beim Abrufen der Inhalte von {table_name}: {e}")
return
# Spaltennamen abrufen
column_names = [desc[0] for desc in cursor.description]
print("Spalten:", column_names)
rows = cursor.fetchall()
for row in rows:
print(row)
def main():
# Parameter auswerten:
# Standard: Nur Tabellenliste mit Eintragszahl
# Wenn "detail" angegeben wurde, sollen auch die Inhalte ausgegeben werden.
# Wird "detail <tablename>" angegeben, dann nur für die angegebene Tabelle.
detail = False
specific_table = None
if len(sys.argv) > 1:
if sys.argv[1].lower() == "detail":
detail = True
if len(sys.argv) > 2:
specific_table = sys.argv[2]
# Verbindung zur Datenbank herstellen
conn = sqlite3.connect("bundles.db")
tables = list_tables(conn)
if not tables:
print("Die Datenbank enthält keine Tabellen.")
return
print("Tabellen in der Datenbank:")
for table in tables:
# Falls ein spezifischer Tabellename angegeben wurde, überspringe alle anderen
if specific_table and table.lower() != specific_table.lower():
continue
count = count_entries(conn, table)
count_str = f"{count} Einträge" if count is not None else "unbekannte Einträge"
print(f" - {table}: {count_str}")
if detail:
print(f" Inhalt der Tabelle {table}:")
print_table_contents(conn, table)
print("-" * 40)
conn.close()
if __name__ == "__main__":
main()