Tavs šīs stundas izaicinājums: Apvienot visas tēmas prasmes — projektēt, izveidot un Python kodā lietot pilnvērtīgu datubāzi spēļu rezultātu glabāšanai un statistikai.
Tavs uzdevums ir izveidot pilnvērtīgu "Highscore datubāzi" — Python lietotnes, kas:
Datu modelis (3 tabulas):
speletaji (id, vards, izveidots)
speles_veidi (id, nosaukums)
rezultati (id, speletajs_id, speles_veids_id, punkti, spelets)
Izveido visas tabulas ar attiecībām un ievāksim sākuma datus.
schema.sql ar visām trim tabulām, PK, FK un CASCADE.seed.sql ar 3 spēlēm ("Skaitļu minētājs", "Atmiņu spēle", "Quiz") un 5 spēlētājiem.db.py, kas savienojas un izpilda abus skriptus.Uzraksti moduli ar CRUD funkcijām.
saglabat_rezultatu(speletaja_vards, speles_nosaukums, punkti):INSERT ... ON CONFLICT DO NOTHING RETURNING id);top_speletaji(speles_nosaukums=None, dienas=30) — atgriež TOP 10 ar filtru pēc spēles un datumu intervāla.statistika(speletaja_vards) — atgriež vārdnīcu ar speles_skaits, kopa, videjie, rekords.main.py failā.Izveido komandrindas rīku un CSV eksportu.
main.py izveido izvēlni ar 4 opcijām: 1) Pievienot rezultātu; 2) TOP 10; 3) Spēlētāja statistika; 4) Eksportēt CSV; 5) Iziet.SELECT s.vards, sv.nosaukums, r.punkti, r.spelets FROM rezultati r JOIN ... rezultātus saglabā highscore_eksports.csv.try/except) tīkla un DB kļūdām.db.py, cli.py, main.py.Pievieno tīmekļa saskarni datu apskatei.
pip install streamlitweb.py ar st.title(), st.dataframe(top10), st.bar_chart() spēlētāju punktiem.streamlit run web.py.INSERT ... ON CONFLICT (vards) DO NOTHING strādātu, laukam jābūt UNIQUE.conn.commit().-- Pilna shēma + 1 testa rezultāts
CREATE TABLE speletaji (
id SERIAL PRIMARY KEY,
vards TEXT NOT NULL UNIQUE
);
CREATE TABLE speles_veidi (
id SERIAL PRIMARY KEY,
nosaukums TEXT NOT NULL UNIQUE
);
CREATE TABLE rezultati (
id SERIAL PRIMARY KEY,
speletajs_id INTEGER REFERENCES speletaji(id) ON DELETE CASCADE,
speles_veids_id INTEGER REFERENCES speles_veidi(id),
punkti INTEGER NOT NULL CHECK (punkti >= 0),
spelets TIMESTAMP DEFAULT NOW()
);
INSERT INTO speletaji (vards) VALUES ('Anna');
INSERT INTO speles_veidi (nosaukums) VALUES ('Skaitļu minētājs');
INSERT INTO rezultati (speletajs_id, speles_veids_id, punkti) VALUES (1, 1, 95);
SELECT s.vards, sv.nosaukums, r.punkti
FROM rezultati r
JOIN speletaji s ON s.id = r.speletajs_id
JOIN speles_veidi sv ON sv.id = r.speles_veids_id;