Perl/Databáze/DBIx
DBIx je rodina jakýchsi rozšíření původního perlovské databázového modulu DBI. Samotný modul DBIx v podstatě neexistuje, ale zato existuje řada různých modulů, spojených podobnou myšlenkou. Tou myšlenkou je jakési odstínění dotazovacího jazyka SQL a umožnění pracovat s databází způsoby, obvyklými v Perlu.
Moduly
[editovat]DBIx::Cookbook
[editovat]Proveditelná (executable) kuchařka pro Objektově relační mapování v Perlu.
DBIx::Class
[editovat]Extensibilní a flexibilní Objektově relační mapovač.
DBIx::Class::Schema::Config
[editovat]Konfigurace databází (přístupové kredenciály apod.) z jednoho souboru YAML
Užitečné odkazy
[editovat]- http://www.dbix-class.org/
- DBIx::Class::Manual::Glossary – terminologie
- DBIx::Class::Tutorial::FromScratch – tutoriál
- DBIx :: Class :: Schema :: Loader :: Base
- DBIx::Class::Schema::Loader: make_schema_at doesn't find any relationship – InnoDB neumí inline specifikaci REFERENCES, namísto toho se musí použít specifikace FOREIGN KEY.
První kroky
[editovat]Vytvoření vlastní knihovny
[editovat]Předpokládáme, že už máme vytvořenou nějakou SQL databázi, a chceme si k ní vytvořit nějakou vlastní na míru ušitou perlovskou knihovnu, jejímž prostřednictvím budeme pohodlně k této knihovně přistupovat. To nám velmi usnadní externí modul DBIx::Class::Schema::Loader, který prozkoumá danou databázi a vytvoří nám metody přístupu k příslušným tabulkám. Jak na to najdeme v dokumentaci
perldoc DBIx::Class::Schema::Loader
Můžeme si na to buď napsat jednoduchý skript anebo přímo z příkazové řádky spustíme příkaz
dbicdump
anebo si dokonce tyto knihovny můžeme vytvářet "v letu" za běhu programu.
Nejobvyklejší volbou asi je použít na vytvoření ten jednoduchý skriptík, který může vypadat v případě databáze MySQL například nějak takhle:
#! /usr/bin/perl -w
use strict;
use DBIx::Class::Schema::Loader qw/ make_schema_at /;
my $dbname = "mojedatabaze";
my $hostname = 'localhost';
my $dsn = "DBI:mysql:database=$dbname; host=$hostname";
my $user = 'kychot';
my $password = 'tajneHESLO123';
make_schema_at(
'MojeAplikace::Schema',
{ debug => 1, dump_directory => './lib'},
[ $dsn, $user, $password],
);
Relace
[editovat]Na konec vygenerovaného souboru MojeAplikace/Schema/Result::MojeTabulka vložím řádek:
__PACKAGE__->has_many('nazev_relace', 'MojeAplikace::Schema::Result::JinaTabulka', 'id');
Přehled možností různých relací:
- has_many
- might_have
- belongs_to
- has_one
Odkazy
[editovat]- DBIx::Class::Manual::DocMap – rozcestník na veškerou dokumentaci o DBIx
- DBIx::Class::Manual::Joining.pod – na základě analogie s SQL příkazy vysvětluje použití relací v DBIx