juremb / bazaregat Goto Github PK
View Code? Open in Web Editor NEWLicense: MIT License
License: MIT License
Pregledala sem vaš ER diagram in imam nekaj vprašanj oziroma pripomb:
true
ali false
?Mimogrede bi pripomnila še, da na repozitorij ne sodi celotna vsebina folderja .idea
, saj so nekatere datoteke znotraj tega folderja user-specific (ali kako drugače nepomembne / nepotrebne / sensitive). Uradni .gitignore podjetja JetBrains, katerih IDEji shranjujejo nastavitve v folder .idea
, se nahaja tukaj, sodeč po temu na vaš repozitorij ne sodi vsaj .idea/workspace.xml
. Ponavadi pa se pri projektih poignorira kar celotno vsebino tega folderja.
Vidim, da je v zadnjem commitu (059630d) na repozitorij šlo celotno virtualno okolje, kar pa seveda tja ne sodi. Da bi ga @zalazni (ali morda @nocmatic?) pobrisala iz repozitorija, ne da bi pobrisala virtualno okolje pri sebi, bo najlažje doseči iz ukazne vrstice (npr. Git Bash) - postaviti se bo treba v vrhnjo mapo repozitorija:
git rm -r --cached flask/zalaenv/
Da okolje ne bo šlo spet na repozitorij, bo treba dodati še ustrezno vrstico v .gitignore
, npr. flask/zalaenv
.
Če @JureMB in @mpuh tega commita še nimata pri sebi, bo morda najlažje, da se zadnji commit nadomesti z novim, ki ne vsebuje neželenih datotek (tega se načeloma ne počne, v takih primerih pa pride prav tudi ta možnost). Potem lahko @zalazni narediš
git add .gitignore
git commit --amend --no-edit # zadnji commit nadomesti z novim
git push -f # "force push" - commit na vrhu se zamenja z novim, tudi če ne gre za njegovo nadaljevanje
Kdor commita 059630d nima pri sebi, lahko potem normalno naredi pull, kot da tega commita nikoli ni bilo. Če pa ga kdo že ima pri sebi in bi se ga rad znebil, lahko naredi
git reset 0bb2397 # commit pred tem
rm -rf flask/zalaenv/ # pobrišemo neželeno
git pull
Če ni bilo lokalnih sprememb, bo pull uspel. V nasprotnem primeru bo treba narediti še commit, da bo lahko pri pullu prišlo do združitve.
Vidim, da v app.py
uvažate podatke za prijavo iz auth.py
(tega seveda ni v repozitoriju zaradi vnosa v .gitignore
). Ker želite, da bo aplikacijo lahko uporabil kdorkoli, tam torej uvozite auth_public.py
(glejte vzorec. Seveda bo potrebno nastaviti tudi ustrezne pravice - poglejte si pdurcik/Baza-clanstva-RDR#3. Vaše aplikacije tako nisem mogel preizkusiti.
Opažam še, da podatke v poizvedbe vstavljate z metodo format
, kar pa lahko vodi do napadov SQL injection. Da bodo poizvedbe varne, na mesto vsakega podatka postavite %s
(brez morebitnih navednic!), podatke pa podajte v seznamu kot drugi element metode execute
, npr.
cur.execute("""
SELECT sailno, tekmovalec.ime, spol, leto_rojstva,
klub.ime AS ime_kluba FROM klub
JOIN clanstvo ON klub.idklub = clanstvo.klub_idklub
JOIN tekmovalec
ON clanstvo.tekmovalec_idtekmovalec = tekmovalec.idtekmovalec
WHERE sailno = %s
""", [sailno])
Poleg tega naredite še nekonstantno število začasnih tabel, kar je v nasprotju s samo organizacijo podatkov - kolikor vidim, to počnete samo za potrebe izračuna točk. Začasno tabelo klubi_plovi
imate lahko kot pogled (VIEW
), izračuna točk se pa lahko lotite nekako tako.
CREATE VIEW uvrsceni_plov AS
SELECT plov_idplov, count(tocke) AS uvrsceni
FROM tocke_plovi
GROUP BY plov_idplov
CREATE VIEW efektivne_tocke AS
SELECT tocke, posebnosti, COALESCE(tocke, uvrsceni+1) AS efektivne_tocke,
tekmovalec_idtekmovalec, plov_idplov
FROM tocke_plovi NATURAL JOIN uvrsceni_plov
SELECT tekmovalec_idtekmovalec, sum(efektivne_tocke) - max(efektivne_tocke) AS net,
sum(efektivne_tocke) AS tot,
array_agg(coalesce(tocke::text, posebnosti) ORDER BY st_plova ASC) AS tocke_plovi
FROM efektivne_tocke JOIN plov ON plov_idplov = plov.idplov
WHERE regata_idregata = %s
GROUP BY tekmovalec_idtekmovalec
ORDER BY net ASC, tot ASC,
array_agg(efektivne_tocke ORDER BY st_plova ASC) ASC, tocke_plovi ASC
Funkcija array_agg
spravi podatke iz ene skupine v seznam - tako je mogoče leksikografsko urejati po točkah čez vse plove (pri ORDER BY
array_agg
poskrbi za ustrezno ureditev številskih točk, tocke_plovi
pa potem uredi še po posebnostih, kjer točke niso navedene). Tako boste v Pythonu direktno dobili seznam točk za vsak plov (to bodo nizi, tako da bodo primerni za prikaz, ne pa tudi nadaljnje računanje).
Seveda lahko z ustreznimi JOIN
i v isti poizvedbi pridobite še ostale podatke o tekmovalcih.
Opazila sem, da imate kodo za uvoz podatkov na repozitoriju v obliki sheeta s končnico xlsx
(kar je malo čudno), medtem ko nikjer ne zasledim kode za ustvarjanje tabel. Prosim, da na repozitorij dodate tudi kodo za ustvarjanje tabel (lahko tudi kar v obliki, kot imate SQL_poizvedbe.txt
).
Bi pa glede samega uvoza podatkov svetovala, da se naredi s Python skripto in ne na roke, kot imate trenutno (na bazo se laho povežete s pomočjo knjižnice, npr. MySQL Connector/Python, ki je narejena s strani podjetja, ki je razvilo MySQL).
S Python skripto preberete podatke iz CSV (npr. tekmovalce), iterirate čez tekmovalce in vsakega dodate v bazo.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.