Prakticky s MySQL - 3. díl

Dnes se podíváme na základy databázového rozhraní jazyka Perl (Perl Database Interface), čili DBI, a vytvoříme si v něm jednoduché skripty k uvedení do problematiky DBI a DBD.
Co je Perl?

Programovací jazyk Perl vznikl v roce 1987 a díky jeho robustnímu pojetí jej lze používat na většině systémových platforem většinou bez nutnosti změn v programovém kódu. Jeho práce s řetězci je zvláště vhodná pro programy CGI. Od doby, kdy bylo vyvinuto databázové rozhraní jazyka Perl, Perl Database Interface – DBI, se Perl stal velmi výkonným nástrojem oblíbeným u řady programátorů. Část architektury DBI, tzv. DBD (database driver) – databázový ovladač, komunikuje na stejné bázi jako např. ODBC s příslušnými ovladači jednotlivých databází, MySQL nevyjímaje. Síla jazyka Perl je tedy především v tom, že se jedním řádkem můžeme spojit s databází Oracle, dalším s databází MySQL a přesouvat mezi těmito databázemi data během několika řádků programového kódu. Toto pochopitelně značně urychluje práci s daty.

Perl DBI a MySQL DBD

Abychom mohli využívat některé z funkcí pro práci s MySQL, musíme si předně nainstalovat jazyk Perl nejčastěji pro systém Windows. My si ukážeme postup instalace v závislosti na programu PPM (Perl Package Manager), který vyhledává moduly v síti Internet, poté je stáhne a nainstaluje. Následující postup předpokládá aktivní připojení k síti Internet. Jinou alternativou je nalezení modulu na Internetu a následná instalace.
  • Stáhneme si jazyk Perl pro Windows.
  • Ve složce s programem nalezneme další složku, bin.
  • Ze složky bin spustíme program PPM.
  • V okně MS-DOS nám slouží k zobrazení dostupných příkazů.
  • Nainstalujeme DBI pomocí install DBI.
  • Vyčkáme na automatickou instalaci, do níž se systém jeví, jako by nereagoval, ale on pouze stahuje data.
  • Systém nám sdělí výsledek instalace.
  • Pro aktivaci MySQL DBD si jej opět musíme stáhnout z Internetu, nebo skrze PPM navolit install DBD-Mysql.
  • Při případných problémech je dostupná online nápověda.

Objekt DBI

Jako u jiných databázových rozhraní i u Perlu zůstává proces používání databází stejný. Musíme se k ní připojit, odeslat dotazy či příkazy a zpracovat výsledky a na závěr se od databáze odpojíme. Databázové rozhraní Perlu tvoří jeden objekt – DBI. Jeho základními metodami jsou metoda data_sources(), která zjišťuje dostupné ovladače. Metoda connect() tvoří manipulátor (handle) zvolené databáze, s nímž budeme zadávat příkazy. Pokud jsou naše připojovací údaje správné, spojíme se pomocí DBI s databází. DBI také umožňuje generování manipulátorů pro různé databáze dle našich aktuálních požadavků. Logika je zde jednoduchá – 1 databáze, 1 manipulátor. Se dvěma manipulátory tedy můžeme efektivně přenášet data z jedné databáze do druhé.

Připojování k databázi pomocí DBI

Při provádění spojení opět musíme zadat nutné připojovací údaje dle následujícího modelu:

$dbh= DBI->connect(DBI:název ovladače:database:název databáze, uživatelské jméno, heslo);

Položka $dbh je proměnnou (symbol dolaru), v níž je uložen manipulátor databáze (database handle – dbh). Dále voláme metodu objektu DBI, což značí šipka. Nakonec zvolíme platné údaje pro připojení k databázi na serveru MySQL. Připojení k naší Diskusi by potom vypadalo takto:

$dbh= DBI->connect(DBI:mysql:database:Diskuse, “root“, “heslo“);

Pro naše potřeby nám budou stačit tyto tři základní metody manipulátoru databáze:

  • $dbh->do(příkaz SQL) – používá se pro SQL dotazy bez požadovaných výsledků (INSERT, UPDATE či příkazy DCl CREATE, DROP,..)
  • $dbh->prepare(příkaz SQL) – generuje manipulátor příkazu a výsledkem dotazu je sada ohraničená závorkami
  • $dbh->disconnect – ukončení práce s databází smazáním manipulátoru z paměti.
Pokud bychom se chtěli dozvědět více o dalších metodách manipulátoru databáze, jako jsou table_info či ping, poslouží nám k tomu zadání příkazu man DBI na příkazovém řádku v adresáři Perlu.

Jak na skripty v Perlu

Jako obvykle si nejprve naznačíme skript a ten potom budeme analyzovat. K pokračování v tomto seriálu se předpokládá minimální znalost jazyka Perl, ale pokud ho neznáte, alespoň uvidíte jeho možnosti.

#!/usr/bin/perl – w

use DBI;

$ovladac=“DBI:mysql“;
$databaze=“Seznamka“;

my $dbh= DBI->connect($ovladac:database=$database, “root”, “heslo”) or die “Nepovedlo se spojení!!!”;

$dbh->do(“INSERT INTO Prispevky (Autor, Prispevek) VALUES (‘anonym’, ‘nevím, co sem napsat;)’)”);
$dbh->do(“INSERT INTO Prispevky (Autor, Prispevek) VALUES (‘Petr’, ‘tak to jsme dva..’)”);
$dbh->do(“INSERT INTO Prispevky (Autor, Prispevek) VALUES (‘anonym’, ‘už to tak bude..’)”);

$dbh->disconnect;

exit;

Začneme od 1. řádku, na němž určuje příkazový řádek skriptu k interpretu kódu v jazyce Perl a příslušný přepínač. Zápis této direktivy spouští skripty bez explicitního volání interpretu kódu jazyka Perl. Zápis kontrolní direktivy, tzv. hash bang – klamný zápis - #!, nám označuje, že se nejprve spustí příkazový řádek a na jeho konec se doplní název skriptu. Poté interpretu nastavíme používání modulu DBI. Bez těchto direktiv by náš skript nefungoval. Dále vytvoříme propojovací řetězec a finálně ošetříme klauzulí or die případ, kdy nedojde k úspěšnému zpracování příkazu. Nakonec vložíme příspěvky do diskuse, odpojíme se od databáze a sdělíme interpretu, že je na konci skriptu. Abychom dnešní povídání o Perlu ukončili s parádou, podíváme se ještě na metodu prepare(). Ta se liší od metod námi již předvedených především tím, že vrací manipulátor příkazu, který má vlastní sadu metod a vlastností. Nejdůležitější jsou:

execute() – vykoná zadaný příkaz SQL

fetchrow_hashref() – vrací asociativní pole s hodnotami výsledné sady ve tvaru název=hodnota

finish() – vymazání manipulátoru příkazu a uvolnění alokovaných prostředků paměti

rows() – vrací počet řádků výsledku dotazu

Prepare()

Příkaz prepare() si opět ukážeme na názorném příkladu při zpracování dat z naší Diskuse k následné reprezentaci:

#!/usr/bin/perl – w

use DBI;

$pripojeni=“DBI:mysql:database=Diskuse“;

my $dbh= DBI->connect($pripojeni, “root”, “heslo”) or die “Nepovedlo se spojení!!!”;

my $sth = $dbh->prepare(“SELECT * FROM Prispevky WHERE Autor=‘Anonym‘ ORDER BY ID DESC”);

$sth->execute();

while(my $ref = $sth->fetchrow_hashref()){
print “$ref->{‘Autor’} $ref->{‘Prispevek‘}“;
}

$sth->finish();
$dbh->disconnect;

exit;

Nejprve opět v našem skriptu spustí interpret jazyka Perl. Po aktivaci modulu DBI a připojení k databázi ověříme metodou prepare() syntaxi SQL dotazu a poté ho načteme z paměti a vykonáme metodou execute(). Poté si načteme výsledek dotazu a v rámci podmínkového cyklu tiskneme načtená data tak dlouho, dokud nedojdeme na poslední záznam. Pak už jen vymažeme manipulátor z paměti a skončíme skript. Abychom mohli pracovat s databází, musíme tedy dodržet tento postup:

Inicializujeme kontrolní direktivitu hash-bang a rozhraní DBI.

#!/usr/bin/perl – w
use DBI;

Sestavíme propojovací řetězec a připojíme se k databázi pomocí DBI.

$pripojeni=“DBI:mysql:database=Diskuse“;
my $dbh= DBI->connect($pripojeni, “root”, “heslo”) or die “Nepovedlo se spojení!!!”;

Pro práci s výsledkem dotazu jej nevykonáváme metodou do(), ale prepare().

my $sth = $dbh->prepare(“SELECT * FROM Prispevky WHERE Autor=‘Anonym‘ ORDER BY ID DESC”);

Před zpracováním výsledku dotazu jej musí metodou execute() odeslat databázi.

$sth->execute();

Po vykonání dotazu s jeho výsledkem pomocí metody fetchrow_hashref() můžeme pracovat a pro zpracování všech dat výsledné sady použijeme podmínkového cyklu while().

while(my $ref = $sth->fetchrow_hashref()){
print “$ref->{‘Autor’} $ref->{‘Prispevek‘}“;
}

Metodou finish() po skončení práce výsledkem dotazu uvolníme systémové prostředky.

$sth->finish();

Ukončíme práci s databází a skript.

$dbh->disconnect;

exit;

SQL příkazy z našich příkladů jsou sice jednoduché, ale lze používat všechny klasické příkazy, jak je známe například z PHP. Ale u vytvářecích příkazů například musíme používat metodu func(), jež umožňuje tvorbu databází.

$tvoric = $dbh->func(‘createdb’, název databáze, ’admin’);

Úvod do CGI

Dalšími funkcemi jsou dropdb či reload, ale těmi se již zabývat nebudeme. Dnes se ještě podíváme na obecný úvod do problematiky CGI. Možnosti Perlu při práci s textovými řetězci jej totiž posunuly především k programování skriptů CGI (Common Gateway Interface – obecné rozhraní brány) pro síť Internet. CGI je sada rozhraní s popisem chování serveru WWW při komunikace se softwarem počítače. Software se stává programem CGI, pokud řídí vstup a výstup podle zmíněného standardu CGI. Ukázkovým příkladem takovýchto aplikací jsou veškeré takto orientované projekty na Internetu dynamicky generující obsah stránek – B2B (business to business – síť elektronických obchodů), B2C (business to customer – elektronický obchod) a mnoho dalších. Perl je díky své rychlé práci s textovými řetězci v rámci CGI skriptů při spolupráci s MYSQL nedostižný, a právě proto se při nich tolik používá.

Klepněte pro větší obrázek
 
typickým příkladem využití CGI je chat

V příštím díle našeho seriálu o MySQL a tentokrát Perlu se detailněji podíváme na spojení CGI, Perlu, DBI a MySQL. Nepůjde již pouze o obecné příklady, ale o konkrétní aplikaci pro registrování uživatelů naší Diskuse a objeví se u ní i častěji obrázky.

Váš názor Další článek: Nejrychlejší vypalovačka

Témata článku: Software, Programování, Order, Zeus, Exit, Zvolená data, Textový řetězec, Finish, Mys, Propojovací síť, Root, Díl, Název databáze, Bang, MySQL, Ppm


Určitě si přečtěte

Japonská MANA může být 80× výkonnější než sebelepší tranzistorový procesor

Japonská MANA může být 80× výkonnější než sebelepší tranzistorový procesor

** Tranzistory současných počítačů vyzařují při přepínání teplo ** Na Tokijské univerzitě proto vyvíjejí adiabatické procesory ** Využívají supravodivost a jsou 80× úspornější

Jakub Čížek | 48

Jakub Čížek
TranzistoryProcesoryTechnologie
Micro:bit V2: Tuto destičku plnou čipů dokáže naprogramovat i vaše babička

Micro:bit V2: Tuto destičku plnou čipů dokáže naprogramovat i vaše babička

** Chcete se teď hned naučit programovat čipy? ** Nechcete nic instalovat a číst zdlouhavé manuály? ** Naprogramujeme si Micro:bit, který zahraje Tichou noc

Jakub Čížek | 35

Jakub Čížek
Pojďme programovat elektronikuProgramování pro děti
Cableporn: Podívejte se na úžasná díla umělců z podnikových serveroven

Cableporn: Podívejte se na úžasná díla umělců z podnikových serveroven

** Uspořádání kabelů můžete vnímat i jako podivný druh umění ** To nejkrásnější se skrývá v datacentrech a serverovnách ** Podívejte se na skutečné „cableporn“ z optiky i kroucené dvojlinky

Vojtěch Malý | 53

Vojtěch Malý
DatacentraServery
Jak se šíří Covid v Česku: Čerstvá data, semafor PES, mapy okresů a obcí. Každý den aktualizované grafy

Jak se šíří Covid v Česku: Čerstvá data, semafor PES, mapy okresů a obcí. Každý den aktualizované grafy

** Vývoj COVID-19 v Česku: nakažení, úmrtí, testovaní, hospitalizovaní ** Mapa podle okresů, přehled podle věku, situace v Evropě i ve světě ** Každý den aktualizované grafy a mapy

Marek Lutonský | 172

Marek Lutonský
COVID-19Koronavirus
Jak najít hranice území obcí a okresů, abyste věděli, kde se můžete pohybovat
Filip KůželJakub Čížek
KoronavirusMapy
Lépe bylo bez Googlu, přiznal s odstupem bývalý šéf Waze
Markéta Mikešová
WazeGoogle
Nová volitelná aktualizace opravuje více než 40 chyb v operačním systému Windows 10
Karel Kilián
Windows UpdateAktualizaceWindows 10