标签: dbix-class

MySql:事务没有检测到死锁?

请考虑以下perl代码:

$schema->txn_begin();

my $r = $schema->resultset('test1')->find({id=>20});

my $n = $r->num;
$r->num($n+1);
print("updating for $$\n");
$r->update();

print("$$ val: ".$r->num."\n");

sleep(4);

$schema->txn_commit();
Run Code Online (Sandbox Code Playgroud)

我期望由于更新受到事务的保护,如果两个进程尝试更新"num"字段,则第二个应该失败并出现一些错误,因为它丢失了竞争.Interbase将此称为"死锁"错误.然而,MySQL会在update()调用上暂停,但在第一个调用commit之后会很乐意继续.然后第二个进程具有num的"old"值,导致增量不正确.注意:

$ perl trans.pl  & sleep 1 ; perl trans.pl 
[1] 5569
updating for 5569
5569 val: 1015
updating for 5571
5571 val: 1015
[1]+  Done                    perl trans.pl
Run Code Online (Sandbox Code Playgroud)

两种情况下的结果值都是"1015".这怎么可能是正确的?

mysql perl transactions dbix-class

2
推荐指数
1
解决办法
642
查看次数

为什么我在DBIx :: Class :: InflateColumn :: DateTime对象中使用sprintf中的未初始化值?

这似乎最开始,因为我升级我的DBIx :: Class,我无法弄清楚我做错了什么.

Use of uninitialized value in sprintf at /opt/perl-5.10.1/lib/site_perl/5.10.1/DBIx/Class/InflateColumn/DateTime.pm line 192.
 at /opt/perl-5.10.1/lib/site_perl/5.10.1/DBIx/Class/InflateColumn/DateTime.pm line 192
    DBIx::Class::InflateColumn::DateTime::_flate_or_fallback('OpusVL::AppKitX::TelecomsBilling::Schema::Result::AsteriskCdr...', '2009-11-13 09:00:00', 'HASH(0x2a85488)', 'parse_%s') called at /opt/perl-5.10.1/lib/site_perl/5.10.1/DBIx/Class/InflateColumn/DateTime.pm line 199
Run Code Online (Sandbox Code Playgroud)

我在结果文件中的列定义是,

package Module1::Schema::Result::AsteriskCdrRecord;

# Created by DBIx::Class::Schema::Loader
# DO NOT MODIFY THE FIRST PART OF THIS FILE

use strict;
use warnings;

use Moose;
use MooseX::NonMoose;
use namespace::autoclean;
extends 'DBIx::Class::Core';

__PACKAGE__->load_components("InflateColumn::DateTime");

__PACKAGE__->table("asterisk_cdr_records");

__PACKAGE__->add_columns(
  "record_id",
  {
    data_type         => "integer",
    is_auto_increment => 1,
    is_nullable       => 0,
    sequence          => "asterisk_cdr_records_record_id_seq",
  },
  "import_id",
  { data_type => "integer", is_foreign_key …
Run Code Online (Sandbox Code Playgroud)

perl dbix-class

2
推荐指数
1
解决办法
851
查看次数

使用关系在DBIx :: Class中搜索

我开始学习DBIx :: Class,我对在相关表中搜索有疑问:

请考虑以下代码:

 my $books = $author->search_related('books', { name => 'Titanic' }); 
 my $books = $author->books->search({name => 'Titanic'});
Run Code Online (Sandbox Code Playgroud)

我想要的只是搜索作者的"泰坦尼克号"书籍$author.
这两个搜索返回相同的结果集?
如果是的话,最好的方法是什么?为什么?
如果不是,有什么区别?

perl dbix-class

2
推荐指数
1
解决办法
1135
查看次数

格式化TemplateToolkit中输出的时间戳字段

我正在使用Perl和Catalyst框架,DBIx类作为ORM,TT作为视图,Postgresql作为DB.

我有一个带有'timestamp without timezone'类型的列,如果我在Postgres中进行手动查询,则列值是这样的格式2012-08-30 21:30:14,但是当我在TT视图文件中打印该值时,我得到它2012-08-30T15:03:13,所以很明显它会被格式化但是通过我究竟无法分辨的.

我想使用Template :: Plugin :: Date格式化输出时间戳,但我得到Catalyst错误:

无法渲染模板"xxx/list.tt2:日期错误 - 错误的时间/日期字符串:期望'h:m:sd:m:y'得到:'2012-08-30T21:28:22'"

代码在xxx/list.tt2中 [% date.format(xxx.created) %]

那么我该如何让它发挥作用呢?提前致谢.

postgresql perl catalyst template-toolkit dbix-class

2
推荐指数
1
解决办法
2366
查看次数

ResultSet和对象之间有什么区别?

DBIx :: Class :: ResultSet我们读到:

WARNING
If called on an object, proxies to "new_result" instead, so
my $cd = $schema->resultset('CD')->new({ title => 'Spoon' });
will return a CD object, not a ResultSet, and is equivalent to:
my $cd = $schema->resultset('CD')->new_result({ title => 'Spoon' });
Run Code Online (Sandbox Code Playgroud)

有人可以解释对象和ResultSet之间的区别是什么?

perl resultset dbix-class

2
推荐指数
1
解决办法
235
查看次数

为什么我们需要返回1行的Perl DBI函数?

我正在研究Perl的DBI,我看到了以下方法:
selectrow_array
selectrow_arrayref
selectrow_hashref
所有这些都从结果集中返回1行.所以我不明白它们的用处是什么.他们是做某种替代品LIMIT 1吗?

perl dbi dbix-class

2
推荐指数
1
解决办法
1947
查看次数

使用Perl的DBIx :: Class并在大于列的位置进行选择

我正在使用该DBIx::Class模块,我正在尝试执行以下查询:

SELECT * FROM MyTable WHERE column > TIMESTAMP
Run Code Online (Sandbox Code Playgroud)

我对Perl非常陌生,DBIx::Class所以我真的只知道如何在列等于值的情况下进行基本选择.如何使用其他比较器进行此操作?

perl dbix-class

2
推荐指数
1
解决办法
1308
查看次数

将DBIx :: Class :: Result转换为哈希

使用DBIx :: Class,谢天谢地,我找到了解决问题的方法.但我相信必须有一个更好的方式.

my $record = $schema->resultset("food")->create({name=>"bacon"});
Run Code Online (Sandbox Code Playgroud)

如何将此记录转换为简单的hashref,而不必在此之后立即进行此调用.

my record = $schema->resultset("food")->search({name=>"bacon"})->hashref_array();
Run Code Online (Sandbox Code Playgroud)

理想情况下,我希望能够编写一个简单的代码片段

 {record=> $record} 
Run Code Online (Sandbox Code Playgroud)

代替

{record => {name => $record->name, $record->food_id, ...}}
Run Code Online (Sandbox Code Playgroud)

这会让我感到疯狂,因为这个表有很多列.

perl dbix-class

2
推荐指数
1
解决办法
1158
查看次数

perl eval块无错误地抛出execptions

我试图在一个eval块下放置一些DBIX事务来进行所有事务,如果中间出现问题则不进行.

我有几个交易正在这样做,没有一个给我带来问题.只有一个:

我构建交易的方式相当棘手,而且值得的是,这些实际上是有效的.如果你愿意,我可以发布那段代码,但也许eval块就足够了:

    eval {
      for (my $sub = 0; $sub < $neuroexam_index; $sub++){
        $transactions{neuroexams}{$sub}->insert;
      }
    } or die $!;
Run Code Online (Sandbox Code Playgroud)

问题是eval [error] Caught exception in pbitdb::Controller::Subjects->add "Died at /home/lioneluranl/svn/pbitdb/pbitdb/script/../lib/pbitdb/Controller/Subjects.pm line 411."在我的控制台中显示错误(),但实际上执行插入.那为什么会这样?

perl eval catalyst dbix-class

2
推荐指数
1
解决办法
159
查看次数

Perl 如何使用 DBIx::Class 漂亮地返回数据

我是 DBIx::Class 的新手。我将它用于 API 以从我的数据库重新调整数据,我想用 DBIC 重新创建一个 SELECT * FROM 表。有了 DBI,它对我来说效果很好。
返回“美丽”数据的最佳方法是什么?
我想以散列数组形式返回数据,例如:

[
  {
    id => 123,
    name => 'name',
    ....
  }
]
Run Code Online (Sandbox Code Playgroud)

但是随着my @rs = $schema->resultset('Product')->all; return \@rs;. 我得到的不是我想要的输出。在使用 Data::Dumper 检查对象时,我得到以下信息:

$VAR1 = bless( {
              '_column_data' => {
                                  'name' => 'test',
                                  'id' => 123'
                                },
              '_result_source' => $VAR1->{'_result_source'},
              '_in_storage' => 1
            }, 'DB::Schema::Result::Product' );
Run Code Online (Sandbox Code Playgroud)

我确定我误解了 DBIC 的概念。
如何仅获取所有列的数据?谢谢大家的帮助!

perl dbi dbix-class

2
推荐指数
2
解决办法
142
查看次数