标签: dbix-class

如何使用DBIx :: Class计算查询数?

DBIx::Class在Web上下文中使用,我想显示执行的SQL查询的数量以及它们为呈现页面所花费的时间.

有关如何实现这一点的任何想法?

perl dbix-class

3
推荐指数
1
解决办法
182
查看次数

perl DBIx sqlite {sqlite_unicode => 1}?

如果连接到MySQL:

my $schema = MyDatabase::Main->connect("dbi:mysql:database=$database;host=$host",'root','', {mysql_enable_utf8 => 1});
Run Code Online (Sandbox Code Playgroud)

连接被强制为utf8;

连接到SQLite:

my $schema = MyDatabase::Main->connect('dbi:SQLite:data/sample.db', {sqlite_unicode => 1});
Run Code Online (Sandbox Code Playgroud)

连接似乎不在utf8中;

目的是消除在获取数据时必须使用decode():from:

Mojo::ByteStream->new($cycle->type)->decode('utf-8')
Run Code Online (Sandbox Code Playgroud)

至:

$cycle->type
Run Code Online (Sandbox Code Playgroud)

谢谢

sqlite unicode perl cjk dbix-class

3
推荐指数
1
解决办法
1599
查看次数

将逻辑从Template Toolkit移动到Catalyst

我认为我在TT模板中使用了太多的条件和计算.

我正在显示DBIc中的项目结果集.对于每个项目,我需要使用检索到的值来计算事物,并且模板似乎不是正确的位置.

但在Catalyst中,它是一个来自DBIc的厚对象.

那么如何将逻辑移到模型中呢?我必须为所有项目运行一个完整的循环并以某种方式更改对象吗?

问候:Migue,

perl catalyst template-toolkit dbix-class

3
推荐指数
1
解决办法
575
查看次数

DBIx :: Class:仅选择has_many大于零的结果

在我们的MySQL数据库中,我有一个third_party_accounts表和它has_many third_party_campaigns.但是,并非所有帐户都有广告系列.我想要做的DBIx::Class只是选择那些有一个或多个广告系列的帐户.最简单的是我发现如下:

my $third_party_account_rs = $schema->resultset('ThirdPartyAccount');
my $with_campaigns_rs      = $third_party_account_rs->search(
    { third_party_account_id => \'IS NOT NULL' },
    {
        join     => 'third_party_campaigns',
        group_by => 'me.id',                                                                                                                                 
    }
);
Run Code Online (Sandbox Code Playgroud)

对于相关的数据库列:

mysql> select id from third_party_accounts;
+----+
| id |
+----+
|  1 |
|  2 |
|  3 |
+----+
3 rows in set (0.00 sec)

mysql> select id, third_party_account_id from third_party_campaigns;
+----+------------------------+
| id | third_party_account_id |
+----+------------------------+
|  1 |                      1 |
|  2 | …
Run Code Online (Sandbox Code Playgroud)

mysql perl orm dbix-class

3
推荐指数
1
解决办法
374
查看次数

为什么要使用这个奇怪的包名变体?

有人可以解释一下程序员在DBIx :: Class模块的文件SQLite.pm中使用这个变体"包名"的目标吗?完整列表:

package # Hide from PAUSE
  DBIx::Class::SQLAHacks::SQLite;

use warnings;
use strict;

use base qw( DBIx::Class::SQLMaker::SQLite );

1;
Run Code Online (Sandbox Code Playgroud)

为什么在'package'之后将包的名称写在其他行?

perl dbix-class

3
推荐指数
1
解决办法
114
查看次数

DBIx :: Class:ResultSet获取大小

我正在使用DBIx :: Class来检索结果,如下所示:

my $users = $c->model('DB::User')->search(
    { active_yn => 'y', client_yn => 'n' },
    {   
        columns => [qw/id first_name last_name username email/],
        order_by => ['last_name'],
        page     => ($c->req->param('page') || 1), 
        rows     => 20, 
    }   
); 
Run Code Online (Sandbox Code Playgroud)

但是,一旦我得到结果,我想知道已经返回了多少,但我似乎无法找到一个告诉我的方法.有谁知道如何$users在执行此查询后得到计数?谢谢!

size perl count dbix-class

3
推荐指数
1
解决办法
1487
查看次数

DBIx :: Class按ID从另一个表中获取行

在我的项目中,我有3个表:艺术家,专辑和曲目

结果艺术家:

...
__PACKAGE__->has_many(
     'albums' => 'MYLIB::DB::Schema::Result::MyDir::Album',
     { 'foreign.artist_id' => 'self.id', },
);
...
Run Code Online (Sandbox Code Playgroud)

结果专辑:

...
__PACKAGE__->belongs_to(
     'artist' => 'MYLIB::DB::Schema::Result::Artist',
     { 'foreign.id' => 'self.artist_id', },
  );

__PACKAGE__->has_many(
     'tracks' => 'MYLIB::DB::Schema::Result::MyDir::Track',
     { 'foreign.album_id' => 'self.id', },
 );
...
Run Code Online (Sandbox Code Playgroud)

结果跟踪:

__PACKAGE__->belongs_to(
    'album' => 'MYLIB::DB::Schema::Result::MyDir::Album',
    { 'foreign.id' => 'self.album_id', },
);
Run Code Online (Sandbox Code Playgroud)

现在我有了一个对象$artist,我想通过ID获取Track.

查询示例: SELECT * FROM Tracks WHERE track_id = $x

perl dbix-class

3
推荐指数
1
解决办法
193
查看次数

使用DBIC将多个"新"项插入数据库

我正在进行一项生物信息学项目,该项目要求我从各种生物体中读取基因组数据(没有太多花哨,只需将其视为字符串)并将其插入数据库中.每次读取属于一个生物体,并且可以包含5000到5000万个基因,我需要在储存之前对其进行处理和分析.

目前执行此操作的脚本是用perl编写的,并且在完成所有计算之后,将结果存储在散列中,如下所示:

$new{$id}{gene_name}              = $id;
$new{$id}{gene_database_source} = $gene_database_source
$new{$id}{product}            = $product;
$new{$id}{sequence}               = $sequence;
$new{$id}{seqlength}              = $seqlength;
$new{$id}{digest}             = $digest;
$new{$id}{mw}                     = $mw;
$new{$id}{iep}                = $iep;
$new{$id}{tms}                = $tms;
Run Code Online (Sandbox Code Playgroud)

在读取所有基因之后,插入将通过散列循环到eval {}语句中.

eval {
foreach my $id (keys %new) {

  my $rs = $schema->resultset('Genes')->create(
    {
        gene_name               => $new{$id}{gene_name},
        gene_product            => $new{$id}{product},
        sequence                => $new{$id}{sequence},
        gene_protein_length     => $new{$id}{seqlength},
        digest                  => $new{$id}{digest},
        gene_isoelectric_point  => $new{$id}{iep},
        gene_molecular_weight   => $new{$id}{mw},
        gene_tmd_count          => $new{$id}{tms},
        gene_species            => $species,
        species_code            => $spc,
        user_id                 => $tdruserid,
        gene_database_source …
Run Code Online (Sandbox Code Playgroud)

mysql perl hash dbix-class

3
推荐指数
1
解决办法
116
查看次数

在一个查询中从DBIx :: Class :: ResultSetColumn获取SQL MIN()和MAX()

我想从表中选择MIN()MAX()列.但是,我只想在一次查询中解决这个问题,而不是两次查询数据库.

我知道我能做到这一点

my $col = $schema->result_source("Birthday")->get_column("birthdate");
my $min = $col->min();
my $max = $col->max();
Run Code Online (Sandbox Code Playgroud)

但它会查询数据库两次.

我发现的唯一其他解决方案是非常丑陋,通过搞乱selectas属性search().例如

my $res = $rs->search({}, {
   select => [ {min => "birthdate"}, {max => "birthdate"},
   as     => [qw/minBirthdate maxBirthdate/]
});
say $res->get_column("minBirthdate")->first() . " - " . $res->get_column("maxBirthdate")->first();
Run Code Online (Sandbox Code Playgroud)

产生这个 - 我想要的SQL

SELECT MIN(birthdate), MAX(birthdate) FROM birthdays;
Run Code Online (Sandbox Code Playgroud)

有没有更优雅的方式来完成这项工作DBIx::Class

为了使其更冷,有没有办法尊重色谱柱的膨胀/放气?

sql perl orm dbix-class

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

为什么 DBIx::Class::Schema::Loader 将我的表名从复数更改为单数?

我正在使用DBIx::Class::Schema::Loader创建这样的架构:

#!/usr/bin/perl

use strict;
use warnings;

use DBIx::Class::Schema::Loader qw/make_schema_at/;

make_schema_at(
    "Mydb::Schema",
    {debug => 0, dump_directory => "../db/",
    generate_pod => 0,},
    ["dbi:mysql:mydb:localhost:3306", 'mydb', 'password'],
);
Run Code Online (Sandbox Code Playgroud)

我在 MySQL 中的表名是people,但是当我运行此代码时,生成的类名为Mydb::Schema::Result::Person

$ cat Mydb/Schema/Result/Person.pm 
use utf8;
package Mydb::Schema::Result::Person;

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

use strict;
use warnings;

use base 'DBIx::Class::Core';
__PACKAGE__->table("people");
__PACKAGE__->add_columns(
  "pplid",
  {
    data_type => "smallint",
    extra => { unsigned => 1 },
    is_auto_increment => 1,
    is_nullable => …
Run Code Online (Sandbox Code Playgroud)

mysql perl dbix-class

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

标签 统计

dbix-class ×10

perl ×10

mysql ×3

orm ×2

catalyst ×1

cjk ×1

count ×1

hash ×1

size ×1

sql ×1

sqlite ×1

template-toolkit ×1

unicode ×1