Install the DBIish module to get a powerful tool for working with databases*:
$ panda install DBIish
You also will need the database driver; for example, libmysqlclient for working with MySQL. Check the documentation of the DBIish module on modules.perl6.org if you want to work with a different database engine.
The module provides an interface similar to the DBI’s in Perl 5. You obtain a database handler, $dbh, and they work via the statement handler, $sth. Let us see some details in the following example.
use DBIish;Â # Connecting to a remote database my $dbh = DBIish.connect( Â Â Â 'mysql', Â Â Â :host<example.com>, Â Â Â :port(3306), Â Â Â :database<test>, Â Â Â :user<test>, Â Â Â :password<test_password> );Â # Now, prepare the statement to get all the data from a table my $sth = $dbh.prepare("select * from calendar"); # And execute the request $sth.execute;Â # Fetch all the rows my @arr = $sth.allrows; say @arr; # Finalise the statement and close the connection $sth.finish; $dbh.dispose;
There are several ways of fetching data. The one shown in the code is the $sth.allrows method that returns a list of lists with the data from the table.
Alternatively, rows can be read one by one using the $sth.row method. To get the row data in a hash, add the :hash attribute: $sth.row(:hash).
my $sth = $dbh.prepare("select what, when from calendar"); $sth.execute;Â my $row_hash = $sth.row(:hash); say $row_hash;
With the insert statements, placeholders may be used to avoid the need of escaping the values before injecting them into the SQL query. In the following example, a new row will be written to the database table. The actual values are passed to the execute method.
my $sth = $dbh.prepare( Â Â Â "insert into calendar values (?, ?)" ); $sth.execute('2017-01-01', 'Wake up');