当前位置: 首页 > 知识库问答 >
问题:

DBIx::Class::Storage::DBI的connect_信息是如何工作的?

林龙野
2023-03-14

connect_info文档:

连接信息

这个方法通常由DBIx::Class::Schema中的“connection”调用,它在将参数列表传递到这里之前将其封装在arrayref中。

参数列表可能包含:

>

  • 在DBI中通常传递给“连接”的相同的4元素参数集,可选地后面跟着DBIx::Class识别的额外属性:

    $connect_info_args = [ $dsn, $user, $password, \%dbi_attributes?, \%extra_attributes? ];
    

    一个单独的代码引用,返回一个连接的DBI数据库句柄,可选地后跟DBIx::Class识别的额外属性:

    $connect_info_args = [ sub { DBI->connect (...) }, \%extra_attributes? ];
    

    一个包含所有属性和dsn/user/密码的hashref:

    $connect_info_args = [{
        dsn => $dsn,
        user => $user,
        password => $pass,
        %dbi_attributes,
        %extra_attributes,
    }];
    
    $connect_info_args = [{
        dbh_maker => sub { DBI->connect (...) },  
        %dbi_attributes,
        %extra_attributes,
    }];
    

    这对于基于Catalyst的应用程序尤其有用,允许以下配置(config::General style):

    <Model::DB>
        schema_class   App::DB
        <connect_info>
            dsn          dbi:mysql:database=test
            user         testuser
            password     TestPass
            AutoCommit   1
        </connect_info>
    </Model::DB>
    

    dsn/用户/密码组合可以由dbh_maker键替代,该键的值是返回连接的DBI数据库句柄的coderef

    请注意,DBI文档建议您始终明确地将AutoCommit设置为0或1。DBIx::Class进一步建议将其设置为1,并通过DBIx::Class::Schema方法中的“txn_do”执行事务。如果不显式地将其设置为零,则DBIx::Class会将其设置为1。这是大多数DBD的默认设置。有关详细信息,请参阅“DBIx::Class and AutoCommit”。

    这是什么?它是一个内部调用的方法,还是一个全局调用的方法?如果它是一个内部调用的方法,为什么要发送一个dbh生成器,或者四个参数?什么决定它被发送什么?它被列为一个方法。什么是$connect_info_args

  • 共有1个答案

    漆雕正奇
    2023-03-14

    下面是我如何让它工作的

    你必须使用这样做的存储(你可以在文档中找到它)

    package MyDBIC::Schema;
    __PACKAGE__->storage_type("DBIx::Class::Storage::DBI::mysql::MySubClass")
    
    package DBIx::Class::Storage::DBI::mysql::MySubClass;
    use mro 'c3';
    use base 'DBIx::Class::Storage::DBI::mysql';
    sub connect_info {
         my $self = shift;
         my $retval = $self->next::method([{
             username => _username(),
             password => $password,
             dsn => "my:dsn:"
         })
         $retval;
    };
    

    我在这里找到了一个粗略的例子。谈谈那些烂医生。。

    • 使用自定义的connect\u info对存储进行子分类。它会被调用,但它返回的任何内容都没有任何用处。呼叫-

     类似资料:
    • DBIx::Class 是一个Perl语言的数据库对象映射框架

    • Class::DBI 是使简单的数据库操作几乎不用编程,同时使困难的变得有可能。对很多简单的数据库应用来说,它使我们完全不用编 写SQL,另一方面它也不强迫你用很复杂的数据结构来表示一个复杂查询。如果你确实需要原始SQL的功能或表达能力,它也会适时的给你让路。 例子程序: #!/usr/bin/perl use My::PhoneBill::Call; my $number = shift or

    • 我有一个DBIx::Class查询,需要太长时间才能完成。 以下所有SQL都是由DBIx::Class生成的。 第一个场景(DBIx简单选择): DBIx查询时间:0.390221s(正常) 第二种场景(使用where的DBIx简单选择): DBIx查询时间:29.27025s!!:( 第三种场景(使用pgadmin3运行上述查询): pgadmin查询时间:25ms(ok) 相同的查询是相当快使

    • 本文介绍了 Kubernetes 中 StorageClass 的概念。在阅读本文之前建议先熟悉 卷 和 Persistent Volume(持久卷)。 介绍 StorageClass 为管理员提供了描述存储 "class(类)" 的方法。 不同的 class 可能会映射到不同的服务质量等级或备份策略,或由群集管理员确定的任意策略。 Kubernetes 本身不清楚各种 class 代表的什么。这

    • 我是DBIx::Class的新手。我用它作为API从我的数据库中重新运行数据,我想用DBIC重新创建一个SELECT*from表。对于DBI,它对我很有效 返回数据“漂亮”的最佳方法是什么 我想以哈希数组的形式返回数据,如: 但是使用

    • 问题内容: 第一次使用Java开发,第一次使用Android开发,因此这是一个新手问题。 我目前有以下代码: 简短问题: 什么是 的.class 属性来完成,f.ex. 在’ C = NewTourny 的.class ‘? 为什么我不能将c转换为Tourny(所有这些类的父类)? 长问题: 目前,这可以处理整个应用程序中的所有按钮导航,并且工作正常。但是,如您所见,当我将c强制转换为Class时