⊗pyPmDOFR 126 of 129 menu

Podatkovne povezave v Pythonu

Recimo, da se soočamo z nalogo shranjevanja očetov in sinov. Naj ima vsak oče le enega sina, sin pa lahko prav tako ima enega sina.

Ugotoviti moramo, kako bomo shranjevali podatke. Prva ideja, ki lahko pride na misel, je narediti dve tabeli: parents za očete in sons za sinove. Nato povežemo ti tabeli z nekim poljem: son_id ali parent_id.

Vendar ta ideja ni zelo dobra - saj lahko ista oseba hkrati biti oče in sin - in jo bo treba shraniti v obeh tabelah, kar je neprijetno, zavzema več prostora in zlahka vodi do napak.

Boljša možnost je povezati tabelo samo s seboj: naredimo tabelo users, v njej bomo shranjevali vse uporabnike in vsakemu dodamo polje son_id, kjer bo shranjen id sina iz iste tabele:

users
id name son_id
1 user1 2
2 user2 3
3 user3 null

Poizvedbe

Zdaj napišimo poizvedbo, ki bo pridobila uporabnika skupaj z njegovim sinom.

Za začetek preprosto pridobimo uporabnike:

SELECT * FROM users

Zdaj pridružimo uporabnikom njihove sinove. Tabelo bomo pridružili sami sebi, zato jo moramo preimenovati:

LEFT JOIN users as sons

Zdaj lahko določimo povezavo med osnovno tabelo in preimenovano:

LEFT JOIN users as sons ON sons.id=users.son_id

Zdaj določimo polja:

SELECT users.name as user_name, sons.name as son_name

Vse skupaj sestavimo in dobimo naslednjo poizvedbo:

SELECT users.name as user_name, sons.name as son_name FROM users LEFT JOIN users as sons ON sons.id=users.son_id

Praktične naloge

Recimo, da imamo kategorije. Vsaka kategorija lahko pripada nadrejeni kategoriji, ta pa lahko pripada svoji nadrejeni kategoriji in tako naprej. Opišite strukturo shranjevanja.

Napišite poizvedbo, ki bo pridobila kategorijo skupaj z njeno nadrejeno kategorijo.

Napišite poizvedbo, ki bo pridobila kategorijo skupaj z njenim nadrejenim in prednadrejenim.

Napišite poizvedbo, ki bo pridobila kategorijo skupaj z njenim nadrejenim, prednadrejenim in praprednadrejenim.

Slovenščina
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Za delovanje spletnega mesta, analitiko in personalizacijo uporabljamo piškotke. Obdelava podatkov poteka v skladu s Politiko zasebnosti.
sprejmi vse nastavi zavrni