4

我是数据库和 DBIx:Class 的新手。因此,如果这完全是新手的错误,请原谅我。我只是按照教程进行操作,然后尝试将架构部署到我的数据库中。根据教程,我将模块分成几个文件。在我运行 createTable.pl 'mysqlshow bla' 后,我看到了一个空数据库。

数据库已启动并正在运行。通过 mysql CREATE TABLE 语句创建表确实有效。

脚本文件,应该根据模式创建一个表 ../createTable.pl

#!/usr/bin/env perl
use Modern::Perl;
use MyDatabase::Main;

my ($database, $user) = ('bla', 'flo');
my $schema = MyDatabase::Main->connect("dbi:mysql:dbname=$database", "$user");

$schema->deploy( { auto_drop_tables => 1 } );

Main.pm 用于加载命名空间 ../MyDatabase/Main.pm

package MyDatabase::Main;
use base qw/ DBIx::Class::Schema /;

__PACKAGE__->load_namespaces();

1;

表的架构文件 ../MyDatabase/Result/Album.pm

package MyDatabase::Main::Result::Album;
use base qw/ DBIx::Class::Core /;

__PACKAGE__->load_components(qw/ Ordered /);
__PACKAGE__->position_column('rank');
__PACKAGE__->table('album');
__PACKAGE__->add_columns(albumid =>
             { accessor  => 'album',
               data_type => 'integer',
               size      => 16,
               is_nullable => 0,
               is_auto_increment => 1,
             },
             artist =>
             { data_type => 'integer',
               size      => 16,
               is_nullable => 0,
             },
             title  =>
             { data_type => 'varchar',
               size      => 256,
               is_nullable => 0,
             },
             rank =>
             { data_type => 'integer',
               size      => 16,
               is_nullable => 0,
               default_value => 0,
             }
            );
__PACKAGE__->set_primary_key('albumid');

1;

我已经花了几个小时通过谷歌寻求帮助,但与 deploy() 方法没有太大关系。谁能解释我的错误是什么?谢谢

4

2 回答 2

1

您可以在 metacpan.org(更新,全文索引)和 search.cpan.org 上找到所有 CPAN Perl 模块的文档。

阅读 DBI 的文档,您会发现一个名为 DBI_TRACE 的环境变量,设置该变量后会将每个 SQL 语句打印到 STDOUT。DBIx::Class 有一个类似的称为 DBIC_TRACE。第一个应该可以帮助您了解 deploy 方法在做什么。

连接数据库不需要密码吗?

于 2013-09-01T07:24:28.993 回答
1

好的,今天我又玩了 perl 和数据库的东西,我发现了错误是什么。

首先,我从 DBI_TRACE 和 DBIC_TRACE 开始,它产生了很多消息,但我无法处理,对我来说,似乎没有任何提示可以解决这个问题。

然后我在谷歌上搜索了一段时间关于这个问题以及部署方法的更多示例。在某些时候我注意到我的文件夹结构是错误的。

表的 Schema 文件应该放在

../MyDatabase/Main/Result/Album.pm

而不是被放置在

../MyDatabase/Result/Album.pm

将架构文件移动到正确的文件夹后,一切正常。

我为这个错误感到羞耻:(但谢谢你的帮助

于 2013-09-10T19:28:36.947 回答