Perl::DBI
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
02/03/12 23:35ID:xHkBB9i/DBI.org
http://DBI.perl.org
DBI-ML-J
http://member.nifty.ne.jp/hippo2000/dbi/dbi_japan.htm
DBI.pm 日本語訳
http://member.nifty.ne.jp/hippo2000/perltips/dbimemo.htm
0269nobodyさん
2006/08/28(月) 17:53:16ID:???見辛い文体で申し訳ないorz
0270nobodyさん
2006/08/28(月) 20:45:48ID:???こちらもスマンかった
とりあえず、DBICについてはスレ違いかもしれないので
初心者板でも行ってきます
【初心者】 λ......
0271nobodyさん
2006/08/28(月) 22:10:57ID:???ぐぐればいくらでもでてくるのに。
0272nobodyさん
2006/08/28(月) 23:09:48ID:???レスありがとうございます。
えっと、申し訳ないですが、そこはすでに拝見させて貰いました・・・
(かなり詳しく書かれており、非常に重宝させて頂いています)
リレーションですが、モデルのファイルに設定を書き込まずに
Catalystのコントローラーにて書きたい点と、
TblDiaryが主キーのカラムじゃない点で頭を悩ませています
説明不足で申し訳ありませんでした。
かなりググったのですが、探し方が足りないのか
未だにネットでは見つからずにいますorz
実際にCatalystを使っておられて、CDBIを使用されている方は
おられるでしょうか?
0273268
2006/08/28(月) 23:18:44ID:???説明がヘタで申し訳ないです・・・
主キーではないTblDiary.have_illustnoと連結させたいので、
このhave_illustnoというカラムを何らかの方法で
illustnoというカラムとリレーション指定を行いたいです
(このままでは、主キーのカラムであるTblDiary.paranoと連結してしまいますので)
希望するhave_illustnoへと連結できるよう、どのようにコントローラーに
指示を送れば良いのかが分からないです。
0275nobodyさん
2006/08/29(火) 00:25:18ID:???コントローラでやる理由は?
0276nobodyさん
2006/08/29(火) 01:34:48ID:???レスありがとうございます。
コントローラに記述する理由ですが、今後テーブルの個数が大きく増減する可能性があり、
モデルを全削除して、再度CatalystのヘルパースクリプトでDBの構造から
モデルファイルを自動作成するかもしれないからです。
ヘルパースクリプトを使わず、変更の度に対応するCatalystのモデルファイルを
手動で追加・削除したりしても良いのですが、どうしてもミスがありますので・・・
こちらは希望ですので、モデルに書くしか実現できないようでしたら諦めたいと思います。
ただ、モデルに書いた場合でも片方のテーブルが主キー以外のカラムと連結できず、
ハマり状態から抜けられずにいます。
モデルにリレーションを書く方法も平行して試行錯誤してみます。
こうじゃなくて
my $records = $table->search(
{belong_dno => $dno},
{order_by => 'order_no'},
{prefetch => ['illust_bind']}
);
こうじゃないのかな
my $records = $table->search(
{
belong_dno => $dno
},
{
order_by => 'order_no',
prefetch => [ 'illust_bind' ]
}
);
2chは半角スペースが詰められちゃうから
書き込むときは全角でインデントするといいよ
0279nobodyさん
2006/08/29(火) 09:36:54ID:???package MySchemaClass;
use base qw/DBIx::Class/;
# 自動生成
package MyController;
use MySchemaClass;
MySchemaClass->belongs_to(...);
0280nobodyさん
2006/08/29(火) 15:58:11ID:???レスを頂きましてありがとうございます。
>>277
ご教授ありがとうございました。
prefetchはorder_byと同じ第2引数に記述するのですね。
今まで第3引数として書いても動作していたのは、
DBICの方で良きに計らってくれたのかもしれません・・・
ただちに直させて頂きました。
インデントの件も御指摘ありがとうございます。
以後気をつけて書き込みさせて頂きます。
0281nobodyさん
2006/08/29(火) 15:59:24ID:???なるほど、DBIC::Schemaを使用すれば、問題とならないのですね。
Catalystを使う上でもDBIC::Schemaが推奨させているようですので、
私もこちらを非常に使いたいのですが、未熟なため、
DBIC::Schemaを使用してCatalystのヘルパースクリプトを立ち上げられずにいます。
こちらのサイトを参考にして試してみたのですが
http://en.yummy.stripper.jp/?eid=362958
>script\lc_create.pl model DBIC DBIC::Schema Lc::Schema create=static DBI:Pg:mydb user pass
とプロンプトからヘルパースクリプトを起動させると
>Can't locate object method "use" via package "DBIx::Class::Schema::Loader" (perhaps you forgot to load "D
BIx::Class::Schema::Loader"?)
『もしかしてDBIx::Class::Schema::Loaderをロードし忘れているんじゃないか?』と指摘されてしまいました。
該当場所まで言って、useでロードして見るものの、
>Can't locate object method "use" via package "DBIx::Class::Schema::Loader"
うしろの( )指摘がなくなっただけでして、現在はこちらで立ち止まっている状態です。
推奨されるDBIC::Schemaには切り替えたいですので、今から引き続き挑戦して参ります。
(何か大ポカをやらかしていそうな気がします・・・)
0282nobodyさん
2006/08/29(火) 16:02:25ID:???非常につまらないことが原因で本当に申し訳ないのですが・・・orz
>>268の件、ようやく望む通りの動きをするコーティングができました。
my $table = $c->model('DBIC::TblDiary');
$table->belongs_to(illust_bind => 'Test::Model::DBIC::TblIllust', 'have_illustno');
my $records = $table->search(
{
belong_dno => $dno
},
{
order_by => 'order_no',
prefetch => ['illust_bind']
}
);
「belongs_to」にて最後に繋げたい、主キーではないカラム名を指示するだけだったようです。
お見苦しい質問をいたしまして、本当に申し訳ございませんでした。
レスを頂いた皆様に、心より御礼申し上げます。
0283nobodyさん
2006/08/29(火) 19:52:13ID:???0284nobodyさん
2006/08/29(火) 20:56:33ID:???クダらん煽りいれるな
0287nobodyさん
2006/10/31(火) 14:14:04ID:WVctgpP6以下やってみたけど、エラーとなりまうす
my $result = $c->form;
my $userdata = $c->model('HOGE')->find(uid => $uid);
$userdata->update($result);
あほなのでフォームの値をいちいちハッシュに入れてからじゃないとうまくできないです。
良い方法あったらおしえてください。
0289nobodyさん
2006/10/31(火) 14:39:43ID:???$userdata->update($result);
これ$resultは$c->formなんですが、これだとエラーになるんですよ。
DBIx::Class::InflateColumn::update(): No such column _records
いちいち $c->req->param('hoge1')をハッシュに入れて、update(\%hoges)とすればうまくいくんですけど
いちいちハッシュにいれなくても良い方法ないですかね。
0290nobodyさん
2006/10/31(火) 14:55:03ID:???$c->formはCatalyst::RequestオブジェクトだからいきなりDBICのupdateに
わたしてもそりゃだめだろう。渡すとすれば$c->form->paramsじゃないか?
チェックはちゃんとしてあるのが前提だけどな。
0291nobodyさん
2006/10/31(火) 16:08:20ID:???http://search.cpan.org/~jrobinson/DBIx-Class-WebForm-0.02/lib/DBIx/Class/WebForm.pm
これためしてみましたが、CatalystのDBICに
__PACKAGE__=>config(additional_base_classes => 'DBIx::Class::WebForm');
入れてみたけど
$userdata->update_from_form($result);
で Can't locate object method "update_from_form" とでてしまう...
0292nobodyさん
2006/10/31(火) 16:16:50ID:???$c->form->paramsが返すハッシュリファレンスの中身は期待しているもの
だったのか確認したのか?
update_from_formはクラスメソッド。使い方がマニュアルと違うじゃん。
0293nobodyさん
2006/11/07(火) 13:24:16ID:oWVVtuaPファイルの中身は変数に一度突っ込んでから
$sth->execut($text);
する方法しかないのでしょうか?
メモリの使用量が心配なんですが、他に良い方法はありませんか?
0294nobodyさん
2006/11/07(火) 14:26:05ID:???どうやって利用するんだ?
取り出すときもメモリの心配するのか?
0296nobodyさん
2007/01/21(日) 06:10:16ID:r5E3Q3qv$res = $st->execute;
while(@res = $st->fetchrow) {
print <<ROW;
<tr>
<td> $res[0] </td>
<td> $res[1] </td>
</tr>
ROW
}
print "$res[2]$res[3]\n";
0297296
2007/01/21(日) 06:11:07ID:r5E3Q3qv作っている状態です。超初心者ですが、よろしくお願いします。
上記のように、$st = $db->prepare()の中に複数のMySQL文を入れることは
可能でしょうか?
また、違う点でもご指摘があればよろしくお願いします。
0298nobodyさん
2007/01/22(月) 03:48:16ID:???0299nobodyさん
2007/02/01(木) 08:18:29ID:???fetchrowにラッパーかます以外、簡単な解決策はないでしょうか。
0300nobodyさん
2007/04/12(木) 00:28:59ID:???Perlのバージョン
DBIのバージョン
DBD::MySQL(PG,Oracle)のバージョン
MySQL(PostgreSQL,Oracle)データベースのバージョン
使える組み合わせの一覧表ってどこかにありませんか?
0302nobodyさん
2007/05/06(日) 12:20:49ID:???use DBI;
$DBName="TestDB.db";
$hDB = DBI->connect(
"dbi:SQLite:dbname=$DBName","","",{PrintError=>0}
);
if(!$hDB){
print "$DBI::errstr ¥n";
exit;
}
$sql =".table;";
$hst = $hDB->do($sql);
if(!$hst){
print $hDB->errstr . "¥n";
exit;
}
print $hst;
$hDB->disconnect;
×MySQL ○SQLite
0305nobodyさん
2007/10/28(日) 22:08:49ID:???テーブル見るだけならsqlite_masterというマスターテーブル?に入ってるから
$dbh->prepare('SELECT * FROM sqlite_master")
とかあとはスクリプトの中からsqliteを直接実行するしかないんじゃないかな
即答ありがとうございます。sqlite_masterとても参考になりました。
0307nobodyさん
2007/10/29(月) 16:37:20ID:???トランザクションでエラーでまくりなんだけど・・・
DBD::SQLite 1.3
0308nobodyさん
2007/10/29(月) 19:34:44ID:???0309nobodyさん
2008/04/27(日) 18:20:14ID:GdnUUJeu調べたりすることが多くて、エラーが出てばっかりとかで、時間は浪費するし、
疲れる。困難の連続なんだが。
DBの接続を実現させるだけでも大変。
でも他人は俺とは違い、難なくクリアしてるんか。頭が良くて、要領もいいのか。
どうやって解決してるんだ。
0310nobodyさん
2008/04/27(日) 21:25:12ID:???データの永続化としては、CSVもどきやCSV, YAML, Storable, DBMとかあるとおもうけど
DBIでRDBMSが一番手堅くね?
0311nobodyさん
2008/04/27(日) 21:25:54ID:???0312nobodyさん
2009/01/12(月) 15:15:30ID:DVs9WJdR覚えて慣れるまで大変だわ。
0313myYyWxRRQ
2009/10/23(金) 02:50:19ID:???0314nobodyさん
2009/10/23(金) 03:08:54ID:Ax+yFrZW覚えるの大変な割りに使い勝手わりーよ
ちょっと気の利いたことすると、すぐに括弧だらけになっちまう
気を利かせなけりゃDBIx::Simpleで充分だし
0315nobodyさん
2010/04/03(土) 19:03:20ID:E/aWmIoC箇所があります。
うろ覚えではあるのですが、DBIで実装されている機能側でキャッシュして
これを一括で実行する方法があったような気がするのですが、ぐぐっても
出てこなかったので、幻ですかね。。
0317nobodyさん
2010/10/09(土) 14:26:31ID:???0319Perl忍者 ◆M5ZWRnXOj6
2010/10/14(木) 21:16:17ID:FhDSY4IL0320nobodyさん
2010/11/18(木) 14:10:29ID:Cpwx90i/mdb上のメモ型フィールドのデータをPerl上で "SELECT memo FROM sampletable" として抽出しようとすると
DBD::ODBC::st fetch failed: [Microsoft][ODBC Microsoft Access Driver]文字列データの右側が切り捨てられました。 列番号 1 (Title) (SQL-01004) at C:\yyy\xxx\www\test.pl line 28.
というエラーが出て、配列にデータが格納されません。
メモ型のみで、テキスト型フィールドのデータはきちんと抽出され、配列に格納されます。
調べてみたところ、メモ型フィールドはSELECTで抽出できないという文章を目にしたのですが
もしそうなのであれば、255Byte以上の文字列はどのようにDBへ出し入れすればよいのでしょうか?
ちなみに、Access上のSQLクエリでSELECTにて抽出した場合には、メモ型フィールドもきちんと抽出されてきます。
同じ命令をOCDB経由で投げると上記エラーが出てきます。
どなたが、救いの手を・・・
0321320
2010/11/19(金) 16:01:37ID:???それを超えるとエラーしてしまう。
テキスト型でも、フィールドサイズが255文字までなので、それ以下しか扱えないということになってしまいます。
相変わらず、メモ型の動作が想定外な為、自己解決ならず。
0322nobodyさん
2011/01/03(月) 19:39:28ID:???$stl = $dbh->prepare("CREATE TABLE ? ( ? char(2) )");
$stl->execute($table_name, $key_name);
文法エラー:
CREATE TABLE 'my_table' ( 'my_key' char(2) )
ほんとうは
CREATE TABLE my_table ( my_key char(2) )
じゃなきゃだめ
■ このスレッドは過去ログ倉庫に格納されています