blog/content/post/2009/07/13/2009-07-13-00001197.md

248 lines
16 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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
---
<div class="section">
<p>
DBIというモジュールを用いてPerlからDBに接続するサンプルを作成しました。結構簡単だ。DBIについてこれから使い方を調べていこう
</p>
<h4>
MySQLの設定
</h4>
<p>
sampleというデータベースの中に、Shopというテーブルがあります。その中にはaddressというフィールドがあります。
</p>
<pre class="syntax-highlight">
kazu634@kazu634-desktop% mysql -u root -p ~/work/googlemaps [<span class="synConstant">3082</span>]
Enter password:
Welcome <span class="synSpecial">to</span> the MySQL monitor. Commands <span class="synSpecial">end</span> <span class="synSpecial">with</span> ; <span class="synStatement">or</span> \g.
Your MySQL connection id <span class="synSpecial">is</span> <span class="synConstant">72</span>
Server version: <span class="synConstant">5.0</span>.<span class="synConstant">75</span>-0ubuntu10.<span class="synConstant">2</span> (Ubuntu)
<span class="synSpecial">Type</span> <span class="synConstant">'help;'</span> <span class="synStatement">or</span> <span class="synConstant">'\h'</span> <span class="synSpecial">for</span> help. <span class="synSpecial">Type</span> <span class="synConstant">'\c'</span> <span class="synSpecial">to</span> clear the buffer.
mysql&#62; SHOW DATABASES;
+<span class="synComment">--------------------+</span>
| Database |
+<span class="synComment">--------------------+</span>
| information_schema |
| mysql |
| sample |
+<span class="synComment">--------------------+</span>
<span class="synConstant">3</span> <span class="synSpecial">rows</span> <span class="synStatement">in</span> <span class="synStatement">set</span> (<span class="synConstant"></span>.<span class="synConstant">00</span> sec)
mysql&#62; USE sample;
Reading <span class="synSpecial">table</span> information <span class="synSpecial">for</span> completion <span class="synSpecial">of</span> <span class="synSpecial">table</span> <span class="synStatement">and</span> <span class="synSpecial">column</span> names
You can turn off this feature <span class="synSpecial">to</span> get a quicker startup <span class="synSpecial">with</span> -A
Database changed
mysql&#62; SHOW TABLES;
+<span class="synComment">------------------+</span>
| Tables_in_sample |
+<span class="synComment">------------------+</span>
| Shop |
+<span class="synComment">------------------+</span>
<span class="synConstant">1</span> <span class="synSpecial">row</span> <span class="synStatement">in</span> <span class="synStatement">set</span> (<span class="synConstant"></span>.<span class="synConstant">00</span> sec)
mysql&#62; <span class="synSpecial">DESC</span> Shop;
+<span class="synComment">--------------+--------------+------+-----+---------+-------+</span>
| Field | <span class="synSpecial">Type</span> | <span class="synSpecial">Null</span> | Key | <span class="synSpecial">Default</span> | Extra |
+<span class="synComment">--------------+--------------+------+-----+---------+-------+</span>
| shopname | <span class="synType">varchar</span>(<span class="synConstant">80</span>) | YES | | <span class="synSpecial">NULL</span> | |
| address | <span class="synType">varchar</span>(<span class="synConstant">90</span>) | YES | | <span class="synSpecial">NULL</span> | |
| tel | <span class="synType">varchar</span>(<span class="synConstant">15</span>) | YES | | <span class="synSpecial">NULL</span> | |
| shophour | <span class="synType">varchar</span>(<span class="synConstant">50</span>) | YES | | <span class="synSpecial">NULL</span> | |
| accomodation | <span class="synType">varchar</span>(<span class="synConstant">60</span>) | YES | | <span class="synSpecial">NULL</span> | |
| <span class="synSpecial">access</span> | <span class="synType">varchar</span>(<span class="synConstant">100</span>) | YES | | <span class="synSpecial">NULL</span> | |
| memo | <span class="synType">varchar</span>(<span class="synConstant">100</span>) | YES | | <span class="synSpecial">NULL</span> | |
+<span class="synComment">--------------+--------------+------+-----+---------+-------+</span>
<span class="synConstant">7</span> <span class="synSpecial">rows</span> <span class="synStatement">in</span> <span class="synStatement">set</span> (<span class="synConstant"></span>.<span class="synConstant">00</span> sec)
mysql&#62; exit
Bye
</pre>
<h4>
perlスクリプト
</h4>
<p>
詳しくは参考リンクを見てください。
</p>
<pre class="syntax-highlight">
<span class="synComment"># === Libraries ===</span>
<span class="synStatement">use strict</span>;
<span class="synStatement">use warnings</span>;
<span class="synStatement">use </span>Data::Dumper;
<span class="synStatement">use </span>DBI;
<span class="synComment"># === Main part ===</span>
<span class="synComment"># データベースへの接続</span>
<span class="synStatement">my</span> <span class="synIdentifier">$dbh</span> = DBI-&#62;<span class="synStatement">connect</span>( <span class="synConstant">'dbi:mysql:dbname=sample'</span>, <span class="synConstant">'root'</span>, <span class="synConstant">'xxxxx'</span> );
<span class="synComment"># ステートメントハンドラの作成(=SQLをここで指定する)</span>
<span class="synStatement">my</span> <span class="synIdentifier">$sth</span> = <span class="synIdentifier">$dbh</span>-&#62;prepare(<span class="synConstant">&#34;select address from Shop&#34;</span>);
<span class="synComment"># ステートメントハンドラの実行(=SQLの実行)</span>
<span class="synIdentifier">$sth</span>-&#62;execute();
<span class="synComment"># ここでデータを取り出し、表示させる</span>
<span class="synStatement">while</span> (<span class="synStatement">my</span> <span class="synIdentifier">@row</span> = <span class="synIdentifier">$sth</span>-&#62;fetchrow_array ) {
<span class="synStatement">print</span> <span class="synConstant">&#34;</span><span class="synIdentifier">@row</span><span class="synSpecial">\n</span><span class="synConstant">&#34;</span>;
}
<span class="synComment"># ステートメントハンドラの解放</span>
<span class="synIdentifier">$sth</span>-&#62;finish;
<span class="synComment"># データベースハンドラの解放</span>
<span class="synIdentifier">$dbh</span>-&#62;disconnect;
</pre>
<h4>
実行結果
</h4>
<pre class="syntax-highlight">
kazu634@kazu634-desktop% perl mysql.pl ~/work/googlemaps <span class="synStatement">[</span><span class="synConstant">3081</span><span class="synStatement">]</span>
東京都豊島区東池袋<span class="synConstant">1-40-2</span>
東京都豊島区東池袋<span class="synConstant">1-42-8</span>
東京都豊島区巣鴨<span class="synConstant">1-15-1</span>
東京都文京区本郷<span class="synConstant">4-37-13</span>
東京都品川区大崎<span class="synConstant">1-6-4</span>
東京都中野区中野<span class="synConstant">5-61-2</span>
東京都中野区中野<span class="synConstant">5-67-5</span>
東京都中央区銀座<span class="synConstant">2-7-18</span>
東京都中央区銀座<span class="synConstant">2-5-5</span>
東京都中央区銀座<span class="synConstant">2-8-15</span>
東京都中央区銀座<span class="synConstant">2-11-6</span>
東京都中央区銀座<span class="synConstant">3-3-11</span>
東京都中央区銀座<span class="synConstant">6-12-10</span>
東京都中央区銀座<span class="synConstant">5-15-1</span>
東京都中央区日本橋<span class="synConstant">2-3-6</span>
東京都中央区日本橋本町<span class="synConstant">1-1</span>
東京都中央区八重洲<span class="synConstant">1-6-17</span>
東京都中央区八重洲<span class="synConstant">1-7-4</span>
東京都大田区大森北<span class="synConstant">1-1-10</span>
東京都大田区西蒲田<span class="synConstant">8-1-7</span>
東京都台東区上野<span class="synConstant">6-1-1</span>
東京都台東区上野<span class="synConstant">4-10-7</span>
東京都台東区上野<span class="synConstant">2-13-13</span>
東京都台東区谷中<span class="synConstant">7-20-6</span>
東京都千代田区五番町
東京都千代田区富士見<span class="synConstant">2-2-6</span>
東京都千代田区三崎町<span class="synConstant">3-6-13</span>
東京都千代田区内神田<span class="synConstant">2-9-9</span>
東京都千代田区内神田<span class="synConstant">3-21-8</span>
東京都千代田区鍛冶町<span class="synConstant">2-1-4</span>
東京都千代田区有楽町<span class="synConstant">1-6-1</span>
東京都千代田区外神田<span class="synConstant">1-16-10</span>
東京都千代田区外神田<span class="synConstant">1-11-6</span>
東京都千代田区神田佐久間町<span class="synConstant">1-18</span>
東京都杉並区阿佐ヶ谷南<span class="synConstant">2-14-10</span>
東京都杉並区高円寺北<span class="synConstant">2-4-4</span>
東京都新宿区西新宿<span class="synConstant">1-24-1</span>
東京都新宿区西新宿<span class="synConstant">1-17-1</span>
東京都新宿区西新宿<span class="synConstant">1-5-11</span>
東京都新宿区西新宿<span class="synConstant">7-23-2</span>
東京都新宿区新宿<span class="synConstant">2-19-1</span>
東京都新宿区新宿<span class="synConstant">3-4-1</span>
東京都新宿区市谷田町<span class="synConstant">1-3</span>
東京都新宿区四谷<span class="synConstant">1-3-22</span>
東京都新宿区歌舞伎町<span class="synConstant">1-3-5</span>
東京都新宿区歌舞伎町<span class="synConstant">1-14-4</span>
東京都新宿区歌舞伎町<span class="synConstant">1-26-6</span>
東京都新宿区西新宿<span class="synConstant">7-1-1</span>
東京都新宿区西新宿<span class="synConstant">7-9-7</span>
東京都新宿区百人町<span class="synConstant">1-18-8</span>
東京都新宿区百人町<span class="synConstant">2-11-25</span>
東京都新宿区高田馬場<span class="synConstant">2-18-6</span>
東京都新宿区高田馬場<span class="synConstant">2-14-2</span>
東京都新宿区高田馬場<span class="synConstant">1-34-8</span>
東京都新宿区高田馬場<span class="synConstant">1-34-12</span>
東京都渋谷区代々木<span class="synConstant">1-30-6</span>
東京都渋谷区千駄ヶ谷<span class="synConstant">1-30-8</span>
東京都渋谷区桜丘町<span class="synConstant">15-15</span>
東京都渋谷区渋谷<span class="synConstant">2-17-5</span>
東京都渋谷区宇田川町<span class="synConstant">36-2</span>
東京都渋谷区渋谷<span class="synConstant">1-16-14</span>
東京都荒川区西日暮里<span class="synConstant">5-23-6</span>
東京都荒川区東日暮里<span class="synConstant">5-51-11</span>
東京都港区赤坂<span class="synConstant">3-10-2</span>
東京都港区新橋<span class="synConstant">4-10-2</span>
東京都港区新橋<span class="synConstant">1-17-2</span>
東京都港区芝<span class="synConstant">5-34-7</span>
東京都港区芝大門<span class="synConstant">2-3-1</span>
東京都港区港南<span class="synConstant">2-3-29</span>
東京都港区高輪<span class="synConstant">3-25-22</span>
東京都江東区亀戸<span class="synConstant">2-20-7</span>
東京都葛飾区東金町<span class="synConstant">1-42</span>
東京都立川市柴崎町<span class="synConstant">3-4-14</span>
東京都立川市曙町<span class="synConstant">2-13-10</span>
東京都立川市曙町<span class="synConstant">2-9-1</span>
東京都武蔵野市中町<span class="synConstant">1-6-7</span>
神奈川県横浜市中区元町<span class="synConstant">1-18</span>
神奈川県横浜市中区港町<span class="synConstant">2-6</span>
神奈川県横浜市中区伊勢佐木町<span class="synConstant">2-66</span>
神奈川県横浜市鶴見区鶴見中央<span class="synConstant">1-3-3</span>
神奈川県鎌倉市小町<span class="synConstant">1-6-19</span>
神奈川県鎌倉市大船<span class="synConstant">1-7-1</span>
神奈川県川崎市川崎区駅前本町<span class="synConstant">3-3</span>
神奈川県川崎市川崎区砂子<span class="synConstant">1-1-10</span>
神奈川県足柄下郡箱根町湯本白石下<span class="synConstant">706-35</span>
埼玉県川越市脇田町<span class="synConstant">103</span>
千葉県市川市八幡<span class="synConstant">2-6-15</span>
</pre>
<h4>
参考
</h4>
<ul>
<li>
<a href="http://d.hatena.ne.jp/asin/4798119172" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://d.hatena.ne.jp/asin/4798119172', 'モダンPerl入門 (CodeZine BOOKS)');">モダンPerl入門 (CodeZine BOOKS)</a>
</li>
<li>
<a href="http://www.rfs.jp/sb/perl/dbi/06.html#fetchrow_array" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://www.rfs.jp/sb/perl/dbi/06.html#fetchrow_array', '第6章 DBI ステートメント・ハンドル');" target="_blank">第6章 DBI ステートメント・ハンドル</a>
</li>
<li>
<a href="http://paranoids.sakura.ne.jp/kaworu/2008-05-14-2.html" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://paranoids.sakura.ne.jp/kaworu/2008-05-14-2.html', 'while (my @row = $sth-&#062;fetchrow_array ) { print &#034;@row¥n&#034;; }');" target="_blank">while (my @row = $sth->fetchrow_array ) { print "@row¥n"; }</a>
</li>
</ul>
<p>
</p>
<div class="hatena-asin-detail">
<a href="http://www.amazon.co.jp/dp/4798119172/?tag=hatena_st1-22&ascsubtag=d-7ibv" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://www.amazon.co.jp/dp/4798119172/?tag=hatena_st1-22&ascsubtag=d-7ibv', '');"><img src="https://images-na.ssl-images-amazon.com/images/I/41W6wTHDSzL._SL160_.jpg" class="hatena-asin-detail-image" alt="モダンPerl入門 (CodeZine BOOKS)" title="モダンPerl入門 (CodeZine BOOKS)" /></a></p>
<div class="hatena-asin-detail-info">
<p class="hatena-asin-detail-title">
<a href="http://www.amazon.co.jp/dp/4798119172/?tag=hatena_st1-22&ascsubtag=d-7ibv" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://www.amazon.co.jp/dp/4798119172/?tag=hatena_st1-22&ascsubtag=d-7ibv', 'モダンPerl入門 (CodeZine BOOKS)');">モダンPerl入門 (CodeZine BOOKS)</a>
</p>
<ul>
<li>
<span class="hatena-asin-detail-label">作者:</span> <a href="http://d.hatena.ne.jp/keyword/%CB%D2%C2%E7%CA%E5" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://d.hatena.ne.jp/keyword/%CB%D2%C2%E7%CA%E5', '牧大輔');" class="keyword">牧大輔</a>
</li>
<li>
<span class="hatena-asin-detail-label">出版社/メーカー:</span> <a href="http://d.hatena.ne.jp/keyword/%E6%C6%B1%CB%BC%D2" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://d.hatena.ne.jp/keyword/%E6%C6%B1%CB%BC%D2', '翔泳社');" class="keyword">翔泳社</a>
</li>
<li>
<span class="hatena-asin-detail-label">発売日:</span> 2009/02/10
</li>
<li>
<span class="hatena-asin-detail-label">メディア:</span> 大型本
</li>
<li>
<span class="hatena-asin-detail-label">購入</span>: 25人 <span class="hatena-asin-detail-label">クリック</span>: 534回
</li>
<li>
<a href="http://d.hatena.ne.jp/asin/4798119172" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://d.hatena.ne.jp/asin/4798119172', 'この商品を含むブログ (113件) を見る');" target="_blank">この商品を含むブログ (113件) を見る</a>
</li>
</ul>
</div>
<div class="hatena-asin-detail-foot">
</div>
</div>
</div>