Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

1. diel - Úvod do databáz v Pythone

Vítam vás pri prvej lekcii kurzu o programovaní databázových aplikácií v Pythone. Kurz spracováva pokročilú problematiku čo možno najjednoduchšie as čo najviac príkladmi a ilustráciami. Preberieme v ňom teóriu i prax a niekoľko prístupov, ktoré sa v Pythone pre prácu s databázou používajú. Kurz popisuje prácu s SQLite, MySQL (MariaDB) a ďalšími databázami v jazyku Python. Na sieti sa nachádzajú aj podrobnejšie kurzy o SQL databázach (nezávisle na jazyku), ktoré odporúčam preštudovať. Alebo aspoň tú, ktorú hodláte používať.

Na čo databázu?

Možno vás napadlo, k čomu vlastne potrebujeme nejakú databázu. Dáta by sme rovnako dobre mohli ukladať do nejakých textových súborov, binárok, XML alebo niečoho podobného. Určite by to nejako fungovalo, alebo nie?

RDBMS

.<> Databáza v Pythone

Označenie databázy je vlastne nepresné av odbornej literatúre sa stretneme s označením RDBMS (Relation DataBase Management System). Slovensky je to preložené ako "systém riadenia bázy dát", čo znie naozaj hrozne a preto budeme ďalej používať označenie databázový stroj alebo RDBMS. Databázový stroj nie je iba úložisko dát. Jedná sa o veľmi sofistikovaný a odladený nástroj, ktorý za nás rieši množstvo problémov a zároveň je extrémne jednoduchý na použitie. S databázou totiž komunikujeme jazykom SQL, ktorým sú v podstate ľudsky zrozumiteľné vety. Nad týmto jazykom vzniklo mnoho nadstavieb a niekedy sa už dokonca s SQL vôbec nestretneme. My si v kurze ukážeme rôzne prístupy a budeme s databázou komunikovať pomocou SQL, ako aj s objektmi pomocou technológie ORM a pomocou GUI.

Spolu s ukladaním dát je ale treba ďalej riešiť mnoho ďalších vecí. Asi by nás napadlo napr. zabezpečenie alebo optimalizácia výkonu. RDBMS toho ale robí ešte oveľa viac, rieši za nás problém súčasnej editácie rovnakej položky niekoľkými používateľmi v rovnaký okamih, ktorý by inak mohol zapríčiniť nekonzistenciu databázy. RDBMS dáta v tomto prípade zamkne a odomkne až po vykonaní zápisu. Ďalej umožňuje spájať niekoľko otázok do transakcií, kedy sa séria otázok vykoná vždy celá alebo vôbec. Nestane sa, že by sa vykonala iba časť. Tieto vlastnosti databázového stroja sú zhrňované skratkou ACID, poďme si ju vysvetliť.

ACID

ACID je akronym slov Atomicity (nedeliteľnosť), Consistency (validita), Isolation (izolácia) a Durability (trvanlivosť). Jednotlivé zložky majú nasledujúci význam:
  • Atomicity - Operácie v transakcii sa vykonajú ako jedna atomická (nedeliteľná) operácia. Tzn., že pokiaľ nejaká časť operácie zlyhá, vráti sa databáza do pôvodného stavu a žiadne časti transakcie nebudú vykonané. Reálny príklad je napr. prevod peňazí na bankovom účte. Pokiaľ sa nepodarí peniaze odpočítať z jedného účtu, nebudú ani pripísané na účet druhý. Inak by bola databáza v nekonzistentnom stave. Pokiaľ by sme si prácu s dátami riešili sami, mohlo by sa nám toto veľmi jednoducho stať.
  • Consistency - Stav databázy po dokončení transakcie je vždy konzistentný, teda validný podľa všetkých definovaných pravidiel a obmedzení. Nikdy nenastane situácia, že by sa databáza nachádzala v nekonzistentnom stave.
  • Isolation - Operácie sú izolované a navzájom sa neovplyvňujú. Ak sa zíde v jeden okamih viac otázok na zápis do rovnakého riadku, sú vykonávané postupne, ako vo fronte.
  • Durability - Všetky zapísané dáta sú okamžite zapísané na trvanlivé úložiská (na pevný disk), v prípade výpadku el. energie alebo iného prerušenia prevádzky RDBMS všetko zostane tak, ako bolo tesne pred výpadkom.

Databáza (presnejšie databázový stroj) je teda čierna skrinka, s ktorou naša aplikácia komunikuje a do ktorej ukladá všetky dáta. Jej použitie je veľmi jednoduché a je odladená tak, ako by sme si sami zápis dát v programe asi ťažko urobili. Vôbec sa nemusíme starať o to, ako sú dáta fyzicky uložené, s databázou komunikujeme pomocou jednoduchého dotazovacieho jazyka SQL, viď ďalej. V dnešnej dobe sa vôbec neoplatí zaťažovať sa otázkou ukladania dát, jednoducho siahneme po hotovej databáze, ktorých je obrovský výber a sú väčšinou zadarmo. O databáze občas hovoríme ako o 3. vrstve aplikácie (1. vrstva je užívateľské rozhranie, 2. vlastná logika aplikácie, 3. je práve dátová vrstva).

Python a SQL

V Pythone sa pracuje s veľkou množinou databáz typu SQL aj NoSQL ( MongoDB). Treba však povedať, že samotný jazyk Python nemá žiadnu priamu podporu žiadnej z nich. Jeho súčasťou sa však stala knižnica pre SQLite, ktorá sa používa ako hlavná a najdôležitejšia.

Pomocou rôznych knižníc je však možné použiť širokú škálu databáz:

vrátane rôznych ORM knižníc a dokonca je možné v do Pythona importovať tabuľky z MS-Office (Excel). Väčšina z týchto knižníc má výraznú komunitnú podporu a nepretržitý vývoj. Žiadnu z nich nemožno označiť nijako prednostne a vždy záleží na aktuálnom použití.

Pre "desktop" asi použijete SQLite alebo PostgreSQL, zatiaľ čo na webe dáte prednosť MySQL, MariaDB. Veľké pozitívum je, že takmer všetky tieto knižnice používajú skoro rovnaké rozhranie.

Python IDE a SQL

Jedným z najlepších vývojárskych prostredí, ktoré podporujú SQL je PyCharm, avšak iba v platenej verzii. Komunitná verzia je z tohto privilégia vyradená. Preto je lepšie mať vhodný univerzálny program, ktorý sa ľahko spojí s takmer akoukoľvek databázou na lokálnom počítači a bez nutnosti použiť internetový prehliadač.

DBeaver

DBeaver – nástroj umožní prácu s niekoľkými desiatkami databáz rôznych typov.
Databáza v Pythone

Ovládanie toho programu je pomerne intuitívne a nie nepodobné takým, ako je SQLite Studio, alebo manager pre Postre. Jednoducho si v menu Database vyberiete New Database Connection, zvolíte typ z ponuky, kde zadáte pripojovacie údaje a môžete pracovať s dátami.

Pripojené databázy zostávajú v zozname a je teda možné manipulovať s mnohými informáciami na rôznych miestach z jedného bodu. Avšak pre serverové stroje je nutné mať daný systém inštalovaný alebo mať prístup na vzdialený server – takéto spojenie v tomto programe je tiež možné.

Relačná databáza

SQL databázy sú (nie je mi známa výnimka) tzv. relačnej databázy. Tento pojem označuje databázu založenú na tabuľkách. Každá tabuľka obsahuje položky jedného typu. Môžeme mať teda tabuľku uzivatele, ďalšiu tabuľku clanky a ďalšie potrebné komentare.

Databázovú tabuľku si môžeme predstaviť napríklad ako tabuľku v Exceli. Tabuľka uzivatele by mohla vyzerať asi takto:

Meno Priezvisko Dátum narodenia Počet článkov
Ján Novák 11.3.1984 17
Tomáš Márny 1.2.1989 6
Jozef Nový 20.12.1972 9
Michaela Sláviková 14.8.1990 1
Položky (konkrétne tu používatelia) ukladáme na jednotlivé riadky, stĺpce potom označujú atribúty (vlastnosti, ak chcete), ktoré položky majú. Použité databázy sú typované, to znamená, že každý stĺpec má pevne stanovený dátový typ (číslo, znak, krátky text, dlhý text, ...) a môže obsahovať hodnoty iba tohto typu. Ak chceme s relačnou databázou rozumne pracovať, každý riadok v tabuľke by mal byť opatrený unikátnym identifikátorom. U užívateľov by to mohlo byť potrebné rodné číslo, oveľa častejšie sa však používajú identifikátory umelé a to tak, že užívateľov jednoducho očíslujeme. K tomu sa dostaneme neskôr.

Slovo relačné označuje vzťah (anglicky relation). Ten je medzi tabuľkami alebo medzi entitami v jednej tabuľke.

V ďalšej lekcii, Python a SQL databázy , si ukážeme prácu so SQL databázou pomocou knižnice SQLite3


 

Všetky články v sekcii
Databáza v Pythone
Preskočiť článok
(neodporúčame)
Python a SQL databázy
Článok pre vás napísal Virlupus
Avatar
Užívateľské hodnotenie:
2 hlasov
Autor se věnuje webovým aplikacím, skladově-účetnímu softwaru, 3D grafice, lexiální analýze a parserování. Studuje fyziku na MFF UK. Učil IT na střední škole.
Aktivity