64 lines
2.0 KiB
Python
64 lines
2.0 KiB
Python
|
|
import sqlite3
|
||
|
|
from pathlib import Path
|
||
|
|
|
||
|
|
|
||
|
|
def _connect(db_path: Path) -> sqlite3.Connection:
|
||
|
|
conn = sqlite3.connect(str(db_path))
|
||
|
|
conn.row_factory = sqlite3.Row
|
||
|
|
return conn
|
||
|
|
|
||
|
|
|
||
|
|
def _list_tables(conn: sqlite3.Connection) -> list[str]:
|
||
|
|
cur = conn.execute(
|
||
|
|
"SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%' ORDER BY name"
|
||
|
|
)
|
||
|
|
return [r["name"] for r in cur.fetchall()]
|
||
|
|
|
||
|
|
|
||
|
|
def _table_columns(conn: sqlite3.Connection, table: str) -> list[tuple[int, str, str, int, str, int]]:
|
||
|
|
cur = conn.execute(f"PRAGMA table_info({table})")
|
||
|
|
rows = cur.fetchall()
|
||
|
|
return [(r[0], r[1], r[2], r[3], r[4], r[5]) for r in rows]
|
||
|
|
|
||
|
|
|
||
|
|
def inspect(db_path: Path, tables: list[str] | None = None) -> None:
|
||
|
|
print(f"\n=== {db_path} ===")
|
||
|
|
if not db_path.exists():
|
||
|
|
print("NOT FOUND")
|
||
|
|
return
|
||
|
|
conn = _connect(db_path)
|
||
|
|
try:
|
||
|
|
all_tables = _list_tables(conn)
|
||
|
|
print(f"tables={len(all_tables)}")
|
||
|
|
if tables is None:
|
||
|
|
tables = all_tables
|
||
|
|
for t in tables:
|
||
|
|
if t not in all_tables:
|
||
|
|
print(f"\n-- {t} (missing)")
|
||
|
|
continue
|
||
|
|
cols = _table_columns(conn, t)
|
||
|
|
print(f"\n-- {t} cols={len(cols)}")
|
||
|
|
for cid, name, ctype, notnull, dflt, pk in cols:
|
||
|
|
print(f"{cid:>3} {name:<40} {ctype:<12} notnull={notnull} pk={pk} dflt={dflt}")
|
||
|
|
finally:
|
||
|
|
conn.close()
|
||
|
|
|
||
|
|
|
||
|
|
if __name__ == "__main__":
|
||
|
|
base_dir = Path(__file__).resolve().parents[1]
|
||
|
|
l2 = base_dir / "database" / "L2" / "L2.db"
|
||
|
|
l3 = base_dir / "database" / "L3" / "L3.db"
|
||
|
|
web = base_dir / "database" / "Web" / "Web_App.sqlite"
|
||
|
|
|
||
|
|
inspect(
|
||
|
|
l3,
|
||
|
|
tables=[
|
||
|
|
"dm_player_features",
|
||
|
|
"dm_player_match_history",
|
||
|
|
"dm_player_map_stats",
|
||
|
|
"dm_player_weapon_stats",
|
||
|
|
],
|
||
|
|
)
|
||
|
|
inspect(web)
|
||
|
|
inspect(l2, tables=["dim_players", "fact_matches", "fact_match_players", "fact_match_rounds"])
|