Přeskočit na obsah

Perl/Databáze/DBIx

Z Wikiverzity

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]

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]