demo / scripts /inspect_demo_dbs.py
VeuReu's picture
Upload 18 files
c79f28f
raw
history blame
1.93 kB
import sqlite3
from pathlib import Path
from typing import Iterable
BASE_DIR = Path(__file__).resolve().parent.parent
DATA_DIR = BASE_DIR / "data"
def iter_db_files() -> Iterable[Path]:
for p in sorted(DATA_DIR.glob("*.db")):
yield p
def inspect_db(db_path: Path) -> None:
print("\n=== DB:", db_path.name, "===")
try:
conn = sqlite3.connect(str(db_path))
conn.row_factory = sqlite3.Row
except Exception as exc:
print(f"[ERROR] No es pot obrir la BD: {exc}")
return
try:
cur = conn.cursor()
# Llistar taules
cur.execute("SELECT name FROM sqlite_master WHERE type='table' ORDER BY name;")
tables = [r[0] for r in cur.fetchall()]
if not tables:
print("(sense taules)")
return
for table in tables:
print(f"\n Taula: {table}")
# Esquema
cur.execute(f"PRAGMA table_info({table});")
cols = cur.fetchall()
col_names = [c[1] for c in cols]
print(" Columnes:", ", ".join(col_names))
# Nombre de registres
cur.execute(f"SELECT COUNT(*) FROM {table};")
n = cur.fetchone()[0]
print(" Nombre de registres:", n)
# Tres primers registres
cur.execute(f"SELECT * FROM {table} LIMIT 3;")
rows = cur.fetchall()
if not rows:
print(" (sense registres)")
else:
for i, row in enumerate(rows, start=1):
as_dict = {k: row[k] for k in row.keys()}
print(f" Registre {i}:", as_dict)
finally:
conn.close()
def main() -> None:
print(f"Inspeccionant BDs a {DATA_DIR}...")
for db_path in iter_db_files():
inspect_db(db_path)
if __name__ == "__main__":
main()