タグ

DBIに関するmyfinderのブックマーク (14)

  • DBI#cloneというメソッド - blog.nekokak.org

    http://search.cpan.org/dist/DBI/DBI.pm#clone DBIにcloneメソッドがあることを@nihenさんがみつけました。 #いやーDBIのドキュメントは良く読むと便利メソッドが一杯ありますね TengとかSkinnyではconnect_infoを受け取るだけでなく、 $dbhを受け取って利用する仕組みも提供しているのですが、 そこで一番問題になっていたのはdbへの接続がブチギレた場合のreconnectの問題でした。 connect_infoがある場合は接続情報を自分で持っており、簡単に再接続できるんですが $dbhしかない場合はいままでできないとおもっていました。 DBI的にも接続時につかったpasswordを取るインタフェースがなかった。 なので$dbhを渡された場合は自動reconnectは行わずにエラーで死亡にするようになってたんですが、 D

  • Scope::Container::DBIを書いた - blog.nomadscafe.jp

    2010 Perl Advent Calendar などでも説明していた Scope::Container でDBの接続管理を行うモジュールを書いた。 CPAN: http://search.cpan.org/dist/Scope-Container-DBI/ github: https://github.com/kazeburo/Scope-Container-DBI 機能的には、Scope::Container に接続情報をキャッシュして、同じDSN・ユーザ名で接続の場合、キャッシュからdbhを返します。Scope::Containerなので任意のスコープで接続の維持と切断ができます。 Scope::Container::DBIには、connectメソッドがあるだけ。DBIと同じくdsn、ユーザ名、パスワード、オプションを渡す。 use Scope::Container::DBI; u

  • Amon2でTengを使うときの設定 - メメメモモ

    DBの設定などはこちらに沿っています。 今回は、以下のコマンドでアプリケーションの雛形を作成した場合です。 $ amon2-setup.pl Hello config/development.plの編集 Teng用の設定を書いておきます。 +{ 'Teng' => { dsn => 'dbi:SQLite:dbname=hello.db', username => '', password => '', }, ... }; スキーマ作成スクリプト DBの情報を読み込んでスキーマを作成するスクリプトを書きます。 use strict; use warnings; use DBI; use FindBin; use File::Spec; use lib File::Spec->catdir($FindBin::Bin, '..', 'lib'); use lib File::Spec->ca

    Amon2でTengを使うときの設定 - メメメモモ
  • DBIx::TransactionManager

    というのを書きました。 https://github.com/nekokak/p5-DBIx-TransactionManager まぁ、DBIx::Skinnyで使っているトランザクションの仕組みを別モジュールに切り出した感じです。 use DBI; use DBIx::TransactionManager; my $dbh = DBI->connect('dbi:SQLite:'); my $tm = DBIx::TransactionManager->new($dbh); { my $txn = $tm->txn_scope; $dbh->do("insert into foo (id, var) values (1,'baz')"); { my $txn2 = $tm->txn_scope; $dbh->do("insert into foo (id, var) values (

  • How do you trace your query with DBI - tokuhirom's blog

    DBIx::QueryLog とかつかわなくても Callbacks を駆使すれば結構いけるよ!っていう話になった。いいね。 use strict; use warnings; use DBI; my $dbh = DBI->connect('dbi:SQLite:','','', { RaiseError => 1, Callbacks => { ChildCallbacks => { execute => sub { my ($obj, @binds) = @_; my $stmt = $obj->{Database}->{Statement}; $stmt =~ s/\?/'$_'/ for @binds; print STDERR $stmt, "\n"; return; }, }, }, }); $dbh->do(q{create table job (func, time)})

  • 生 DBI ユーザーのための DBI Cookbook (5) - 日向夏特殊応援部隊

    まさかの続編ですよwww HandleError を使ってより詳しいエラーを得る 今日、帰りに @myfinder さんと話していて、syslog-ng に吐かれるエラーで Too many connection とかをちゃんと監視しつつも、エラーメールボムによって大事な思い出が消えたりしないようにしたいねー的なことを話していて、その場合はエラーナンバーをきちんと記録するだの、エラーが起こった DB の host 名だとかで良しなにエラー通知間隔を制御したいよねと。 そういう際にやっぱり DBホスト名だとか追加情報がエラー文字列に入ってると便利だろうなということでこんなソリューションはどうかと。 #!/usr/bin/perl use strict; use warnings; use Test::More; use Test::Exception; use Carp; use Dat

    生 DBI ユーザーのための DBI Cookbook (5) - 日向夏特殊応援部隊
    myfinder
    myfinder 2010/08/10
    zigorou++
  • 第35回 DBI:生のSQLが散らばると言う前に | gihyo.jp

    Perldbm いまでは省みられることも少なくなりましたが、Perlには1989年にリリースされたバージョン3.0以降、dbmと呼ばれるシンプルなデータベースにアクセスする機構が標準で組み込まれています。このdbmは、いわゆるリレーショナルデータベースとは違ってキーと値の組み合わせをディスクに保存できるだけのものですが、ハッシュ(当時はまだ連想配列と呼んでいました)と結びつけることでタブ区切りファイルなどを読んでいくより高速に検索ができたため、ユーザ環境に永続的なデータを保存する手段のひとつとして重宝されていました。Perl 3/4の時代にはdbmopenというコマンドが使われていましたが、この機構はPerl 5になって一新され、いまではより汎用的なtieというコマンドを使うことになっています。この仲間としては古くからあるBerkeley DBやGDBMなどのほか、最近では平林幹雄氏のT

    第35回 DBI:生のSQLが散らばると言う前に | gihyo.jp
  • DBIx::ProfileManager で SQL Profiling | BLOG - DeNA Engineering

    風邪を引きっぱなしで全然治らない山口です。恐らくネット上では zigorou と言うハンドルでご存知の方もいらっしゃるかもしれません。 まずは技術系のネタの第1弾です。 今回は実際にモバゲーオープンプラットフォームで用いている SQL Profiling の方法をご紹介致します。 DBI::Profile について モバゲータウン ではデータベースは MySQL を用いており、サーバーサイドプログラムから管理ツールまでのほとんどが Perl で書かれており、 当然ながら DBI モジュールまたはそれを利用したモジュールを使って DB アクセスをしています。 今回、オープンプラットフォームチームで作った OpenSocial RESTful API ですが、モバゲータウン内のデータベースに大量にアクセスする為に日々どのようなクエリが実行され、どれくらいの実行時間が掛かっているかは常に気になる

    DBIx::ProfileManager で SQL Profiling | BLOG - DeNA Engineering
  • DBIx::RewriteDSN で - JPerl Advent Calendar 2009

    前置き みなさんこんにちは、cho45 です。 こちらは hacker track ということで、僕がつくったモジュールの一つを紹介したいとおもいます。今回ご紹介するモジュールは DBIx::RewriteDSN です。 DBIx::RewriteDSN は非常に小粒なツールですが、なかなか苦しいモジュールなんじゃないかと自分でもおもっています。使わなくていいなら幸せでしょうね。 歴史あるプロジェクトを開発する際、データソースがハードコードされているというようなケースはままあります。さっさと書きかえられる程度ならばいいのですが、修正箇所が多ければ多いほどミスが発生しやすいわけですし、それが番のデータベースであるならば、一箇所ミスをしただけで甚大な被害が出ることも予想するに難しくありません。 「DBI は使っているが、データベースサーバへの IP などが各所にちらばっており、こわくて

    myfinder
    myfinder 2009/12/11
    別の使い方で使えるかもしれないので検証したい><
  • 生 DBI ユーザーのための DBI Cookbook (3) - 日向夏特殊応援部隊

    d:id:ZIGOROu:20090814:1250262134 のさらに続編です。 現在接続している dbh 全てを disconnect したい場合 use strict; use warnings; use DBI; ### なんかいっぱい接続したりとかする my %drhs = DBI->installed_drivers; for my $drh ( values %drhs ) { for my $dbh (@{$drh->{ChildHandles}}) { eval { $dbh->disconnect; }; } } こんな感じ。永続環境で1リクエストをさばく間は DBI->connect_cached() で接続するとして、それらを最後に明示的に disconnect するとかで使えると思う。 SEE ALSO 生 DBI ユーザーのための DBI Cookbook (

    生 DBI ユーザーのための DBI Cookbook (3) - 日向夏特殊応援部隊
    myfinder
    myfinder 2009/11/26
  • DBIで文字コード変換その後 - omoonのブログ

    http://d.hatena.ne.jp/omoon/20070710/1184034594 http://q.hatena.ne.jp/1183789393 このあたりに書いていたことの顛末です。とりあえず、この形で様子を見る、というのができたので書いときます。とりあえず今のところ暫定版。変化があり次第追記します。 結論から言うと、DBIのサブクラスを作って実装しました。 主に、この部分を参考にしました。 http://search.cpan.org/~timb/DBI-1.58/DBI.pm#Subclassing_the_DBI やったことは、以下の3つ。 prepare部分でsql文をencode(cp932へ) execute部分でプレースホルダへの変数をencode(cp932へ) fetch部分で戻り値をdecode(cp932から) 上2つで、更新(insert, upd

    DBIで文字コード変換その後 - omoonのブログ
  • DBIx-Sharding-0.04 - Pluggable library handles many databases a.k.a Database Sharding. - metacpan.org

    Tools Download (22.47KB) MetaCPAN Explorer Permissions Subscribe to distribution Install Instructions Dependencies Carp Class::Data::Inheritable DBI UNIVERSAL::require YAML and possibly others Reverse dependencies CPAN Testers List Dependency graph Permalinks This version

    myfinder
    myfinder 2009/08/26
    [DBIx::Sharding]
  • 生 DBI ユーザーのための DBI Cookbook (2) - 日向夏特殊応援部隊

    さて、まさか続編書くと思わなかったけど、d:id:ZIGOROu:20090731:1249050735 の続きです。 追記 (2009-08-15T00:30:56+09:00) ちなみに、下記で紹介してる方法は一般的には DBI の資産がたくさん合ってモゴモゴな状況をどうするか…みたいな状況の人向けです。 一般的には宜しくないです、と言うことを踏まえてどうぞ。 DBI の拡張をサブクラスを用いて行う Subclassing the DBI にちゃんと書いてあるんですが、DBI はサブクラスを作る為の環境が整っています。 論より証拠、実際の例です。 #!/usr/bin/perl use strict; use warnings; use DBI; use YAML; { package DBIx::Hideki; use base qw(DBI); package DBIx::Hide

    生 DBI ユーザーのための DBI Cookbook (2) - 日向夏特殊応援部隊
    myfinder
    myfinder 2009/08/16
    「KY界隈」が広がりつつあると聞いてきました。
  • 生 DBI ユーザーのための DBI Cookbook (1) - Yet Another Hackadelic

    ちょっと前まで DBI で非同期アクセスなエントリが各所で上がっていましたが皆さん如何お過ごしでしょうか? さてと、、、歴史的な経緯とか歴史的な経緯とかで生 DBI 相当を使ってる方もそれなりにいるでしょう。奥さん、大事な事なんで二度言いましたよ! DBI のインターフェースってまぁそんな使いやすい物じゃないんですが、工夫次第で出来る事もあります。 ちなみにサンプルデータベースとして、MySQL Documentation - Example Databases の world データベースを使っています。 fetchall_arrayref でデータ整形 まず以下のように使ってみます。 #!/usr/bin/perl use strict; use warnings; use Data::Dump qw(dump); use DBI; use Perl6::Say; my $dbh =

    生 DBI ユーザーのための DBI Cookbook (1) - Yet Another Hackadelic
  • 1