研究でDBをいじる機会を得たので、せっかくだからperlのO/RマッパであるDBIx::Classを使ってみることにした。そして例によってハマったのでメモっておく。 各テーブルに対応したクラスをDBIx::Class::Schema::Loaderで自動生成して(マニュアルのワンライナー参照) 一緒に掃き出されたSchemaクラスに以下の一行を追加した。 __PACKAGE__->connection('dbi:Pg:dbname=ga;host=localhost', 'postgres', '', { AutoCommit => 0 }); optionでAutoCommit => 0としたのは複数のテーブルをupdateする際に手動でコミットしたかったから。多分そっちの方がエラーの処理が書きやすいかなと思った。後の地雷を作ることになる。 find等のメソッドが動くことを確認したので次
If you want a somewhat pretty picture of your DBIC schema (with relationships drawn, of course), install GraphViz, SQL::Translator, and DBICx::Deploy from the CPAN, and then run: $ dbicdeploy -Ilib MyApp::Schema ~/graphs GraphViz ~/graphs will then contain a .sql file that is actually a png of your schema. Rename it and see your schema in your favorite png viewing application. Oh yeah, the post ne
DBIx::Class にはいくつか興味深いモジュールがあります。 DBIx::Class::PK::Auto 標準で添付されているモジュールです。これについては以前書きました。 DBIx::Class::InflateColumn 標準で添付されているモジュールです。カラムデータとオブジェクト(たとえば DateTime クラスとか)を相互変換できるモジュールです。これを使うと CDBI の has_a で外部クラスを指定した時のようなことができるのかな? DBIx::Class::WebForm Data::FormValidator 等の結果をもとに,レコードを作成したり更新したり(CRUD)することができるモジュールみたいです。でも,実際にはフォームとテーブルが一対一対応してることなんて少ないと思います。ドキュメントも全然書いてないし。なので自分では使わないと思います。 DBIx:
ActiveRecordなORマッピングはJavaのTorqueを大昔に触ったきりなのでこんな実装デザインが正しいのかどうかわかりませんが、DBIx::Classで package CD::Schema::Albums; use strict; use warnings; use base qw/DBIx::Class/; __PACKAGE__->load_components(qw/Core/); __PACKAGE__->table('albums'); __PACKAGE__->add_columns(qw/ id artist title /); __PACKAGE__->set_primary_key('id'); __PACKAGE__->belongs_to('artist' => 'CD::Schema::Artists'); __PACKAGE__->has_many(
Windows 10 の入ったディスクのバックアップが clonezilla で外形的にできることがわかった Posted on Jun 27, 2020 Windows10 が載ってるディスクに破壊的な変更加える前にバックアップしたくて、SystemRescueCd で clonezilla 使ってディスクまるごとイメージ化した(内部的には partimage が使われてる?)。 でこれ、レストアしたら起動する状態まで持っていけるんかな? すんごく不安だ。。。 — woremacx (@woremacx) June 15, 2020 systemrescuecd に同梱されている clonezilla を使ってまるまる取った Windows 10 のバックアップが戻せるか不安で仕方なかったので、VirtualBox に戻せるか試した。 そもそもなぜ clonezilla を試したかったの
よくわからない表題ですが要は・・・ MyApp::Schema::TopicsとMyApp::Schema::Commentsが1:nの関係にあるとして package MyApp::Schema::Topics; use strict; __PACKAGE__->has_many('comments' => 'MyApp::Schema::Comments'); 1; こんなアクションで sub list : Local { my ( $self, $c ) = @_; my $topics = $c->model('Topics')->search({}); $c->stash->{topics} = $topics; $c->stash->{template} = 'list.tt'; } TTで素でやる場合 <html> <body> <ul> [% WHILE (topic =
以前、DBIx::Class::DigestColumnsの問題というエントリーでDBIC::DigestColumnsがいまいち使いづらいようなことを書きましたが、今年に入ってアップデートされてちょっと便利になった模様。 ユーザー管理で生パスワードを保存したくない場合には結構便利なコンポーネントです。 テーブルを作って create table users ( id integer not null primary key, username text not null, password text not null ); schemaクラスはLoaderにまかせて package MyApp; use strict; use base qw/DBIx::Class::Schema::Loader/; __PACKAGE__->loader_options( components =>
書き忘れたけどさっきの update_schema.pl は ./script/myapp_update_schema.pl dbi:mysql:tablename username password 見たいな感じで DSN を渡す必要がある。めんどう。 ここら辺があれでまだヘルパーにはなってない。 mizzy.org : Re: DBICとDBIx::Class::Schema::Loader 僕のいろいろな勘違い 僕の中で流行ってる使い方があるのでかぶせて書いておいてみる。mizzy さんの二個目の例を自分ルール化させた感じ? 作業は一般的なCatalystアプリのディレクトリ構造上であるとして、そこに新しく schema というディレクトリを作成。 そんで、 schema/lib/Schema/{TableName}.pm に各テーブルのリレーション定義とかメソッドとかを自分で書く。
こないだDBICの使い方で、+selectと+as の使い方を説明した。 DBIC で+select と+as : ああ、今頃気づくなんて... そしたら、トラックバックでこんなのを教えてもらった。 [perl][dbic]inflate_column これはいいわ。 サイト全体に関わるフォーマッティングはinflate, deflate を使って、部分的にフォーマットを変えたいときは+select, +as を使うようにしようと思う。 今作っちゃったサイトはどうしよう... リファクタリングリストに追加だな。 このinflate, deflate の設定をSchem::Loader でやる方法があれば、もっと便利になりそうなんだけどなぁ。特に、日付のフォーマットなんてだいたい同じものを使うんだから。
VERSION-0.05000での記述。http://search.cpan.org/~mstrout/DBIx-Class/ ドキュメントも当初に比べれば増えてきたし、そっち見たほうがよかばい。 まあ以下は簡単なまとめで。一通り使えるくらいは書きたい。 このサイトはWikiなので途中途中に色々追加したり修正したりしますからご注意を DBIx::Class::Schemaを使ってみる これからDBICではSchemaメインらしい。 使うテーブル作成SQL create table user ( id int(10) NOT NULL auto_increment, name varchar(256) NOT NULL, PRIMARY KEY (id) ) ENGINE = InnoDB;
作業内容 ルンバみたいな自動で送られてくる棚に商品をバーコードでスキャンして入れるだけ ノルマは1日3000件 拘束時間11時間(勤務時間10時間プラス休憩1時間) 時給1050円 なんj民にオススメ
この前の仕事からTipsをダンプ... Catalyst x Lighttod の時、Catalyst は 5.7004 以上必須 Shibuya.pm の typester さんの話で感化されたのもあって採用した Lighty、イイ。シンプルに言われたことだけをこなしてくれる感じ。 で、Catalyst を Lighty で動かすときは Catalyst 5.7004 以上が必須なんすね。でないと、SCRIPT_NAME などの環境変数のバグから、http://example.com/foo/ と http://example.com/foo のように最後にスラッシュが付く付かないで実行されるアクションが変わってしまう。なので今後はアプリケーションクラスにすぐ use Catalyst::Runtime '5.7004'; と書くことにした。 Lighty、UploadProgressは
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く