--- title: DBIでPerlからDBに接続 author: kazu634 date: 2009-07-13 wordtwit_post_info: - 'O:8:"stdClass":13:{s:6:"manual";b:0;s:11:"tweet_times";i:1;s:5:"delay";i:0;s:7:"enabled";i:1;s:10:"separation";s:2:"60";s:7:"version";s:3:"3.7";s:14:"tweet_template";b:0;s:6:"status";i:2;s:6:"result";a:0:{}s:13:"tweet_counter";i:2;s:13:"tweet_log_ids";a:1:{i:0;i:4707;}s:9:"hash_tags";a:0:{}s:8:"accounts";a:1:{i:0;s:7:"kazu634";}}' categories: - mysql - Perl ---

DBIというモジュールを用いてPerlからDBに接続するサンプルを作成しました。結構簡単だ。DBIについてこれから使い方を調べていこう!

MySQLの設定

sampleというデータベースの中に、Shopというテーブルがあります。その中にはaddressというフィールドがあります。

kazu634@kazu634-desktop% mysql -u root -p                                  ~/work/googlemaps [3082]
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 72
Server version: 5.0.75-0ubuntu10.2 (Ubuntu)
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| sample             |
+--------------------+
3 rows in set (.00 sec)
mysql> USE sample;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> SHOW TABLES;
+------------------+
| Tables_in_sample |
+------------------+
| Shop             |
+------------------+
1 row in set (.00 sec)
mysql> DESC Shop;
+--------------+--------------+------+-----+---------+-------+
| Field        | Type         | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+-------+
| shopname     | varchar(80)  | YES  |     | NULL    |       |
| address      | varchar(90)  | YES  |     | NULL    |       |
| tel          | varchar(15)  | YES  |     | NULL    |       |
| shophour     | varchar(50)  | YES  |     | NULL    |       |
| accomodation | varchar(60)  | YES  |     | NULL    |       |
| access       | varchar(100) | YES  |     | NULL    |       |
| memo         | varchar(100) | YES  |     | NULL    |       |
+--------------+--------------+------+-----+---------+-------+
7 rows in set (.00 sec)
mysql> exit
Bye

perlスクリプト

詳しくは参考リンクを見てください。

# === Libraries ===
use strict;
use warnings;
use Data::Dumper;
use DBI;
# === Main part ===
# データベースへの接続
my $dbh = DBI->connect( 'dbi:mysql:dbname=sample', 'root', 'xxxxx' );
# ステートメントハンドラの作成(=SQLをここで指定する)
my $sth = $dbh->prepare("select address from Shop");
# ステートメントハンドラの実行(=SQLの実行)
$sth->execute();
# ここでデータを取り出し、表示させる
while (my @row = $sth->fetchrow_array ) {
print "@row\n";
}
# ステートメントハンドラの解放
$sth->finish;
# データベースハンドラの解放
$dbh->disconnect;

実行結果

kazu634@kazu634-desktop% perl mysql.pl                                     ~/work/googlemaps [3081]
東京都豊島区東池袋1-40-2
東京都豊島区東池袋1-42-8
東京都豊島区巣鴨1-15-1
東京都文京区本郷4-37-13
東京都品川区大崎1-6-4
東京都中野区中野5-61-2
東京都中野区中野5-67-5
東京都中央区銀座2-7-18
東京都中央区銀座2-5-5
東京都中央区銀座2-8-15
東京都中央区銀座2-11-6
東京都中央区銀座3-3-11
東京都中央区銀座6-12-10
東京都中央区銀座5-15-1
東京都中央区日本橋2-3-6
東京都中央区日本橋本町1-1
東京都中央区八重洲1-6-17
東京都中央区八重洲1-7-4
東京都大田区大森北1-1-10
東京都大田区西蒲田8-1-7
東京都台東区上野6-1-1
東京都台東区上野4-10-7
東京都台東区上野2-13-13
東京都台東区谷中7-20-6
東京都千代田区五番町
東京都千代田区富士見2-2-6
東京都千代田区三崎町3-6-13
東京都千代田区内神田2-9-9
東京都千代田区内神田3-21-8
東京都千代田区鍛冶町2-1-4
東京都千代田区有楽町1-6-1
東京都千代田区外神田1-16-10
東京都千代田区外神田1-11-6
東京都千代田区神田佐久間町1-18
東京都杉並区阿佐ヶ谷南2-14-10
東京都杉並区高円寺北2-4-4
東京都新宿区西新宿1-24-1
東京都新宿区西新宿1-17-1
東京都新宿区西新宿1-5-11
東京都新宿区西新宿7-23-2
東京都新宿区新宿2-19-1
東京都新宿区新宿3-4-1
東京都新宿区市谷田町1-3
東京都新宿区四谷1-3-22
東京都新宿区歌舞伎町1-3-5
東京都新宿区歌舞伎町1-14-4
東京都新宿区歌舞伎町1-26-6
東京都新宿区西新宿7-1-1
東京都新宿区西新宿7-9-7
東京都新宿区百人町1-18-8
東京都新宿区百人町2-11-25
東京都新宿区高田馬場2-18-6
東京都新宿区高田馬場2-14-2
東京都新宿区高田馬場1-34-8
東京都新宿区高田馬場1-34-12
東京都渋谷区代々木1-30-6
東京都渋谷区千駄ヶ谷1-30-8
東京都渋谷区桜丘町15-15
東京都渋谷区渋谷2-17-5
東京都渋谷区宇田川町36-2
東京都渋谷区渋谷1-16-14
東京都荒川区西日暮里5-23-6
東京都荒川区東日暮里5-51-11
東京都港区赤坂3-10-2
東京都港区新橋4-10-2
東京都港区新橋1-17-2
東京都港区芝5-34-7
東京都港区芝大門2-3-1
東京都港区港南2-3-29
東京都港区高輪3-25-22
東京都江東区亀戸2-20-7
東京都葛飾区東金町1-42
東京都立川市柴崎町3-4-14
東京都立川市曙町2-13-10
東京都立川市曙町2-9-1
東京都武蔵野市中町1-6-7
神奈川県横浜市中区元町1-18
神奈川県横浜市中区港町2-6
神奈川県横浜市中区伊勢佐木町2-66
神奈川県横浜市鶴見区鶴見中央1-3-3
神奈川県鎌倉市小町1-6-19
神奈川県鎌倉市大船1-7-1
神奈川県川崎市川崎区駅前本町3-3
神奈川県川崎市川崎区砂子1-1-10
神奈川県足柄下郡箱根町湯本白石下706-35
埼玉県川越市脇田町103
千葉県市川市八幡2-6-15

参考

モダンPerl入門 (CodeZine BOOKS)

モダンPerl入門 (CodeZine BOOKS)