我正在使用Perl DBI。我知道$dbase->tables()
将返回相应数据库中的所有表。同样,我想知道数据库中可用的模式。有没有可用的功能?如何从Perl的DBI获取模式?
回答
什么你要找的是:DBI->table_info()
这样称呼它:
my $sth = $dbh->table_info('', '%', '');
my $schemas = $dbh->selectcol_arrayref($sth, {Columns => [2]});
print "Schemas: ", join ', ', @$schemas;
我昨天写了一个基于这个想法的脚本,但'DBI :: ODBC'不支持'table_info',我需要访问'* .mdb'。 – reinierpost 2011-02-23 13:01:13
PS:当前两个参数是undef时它支持它! – reinierpost 2012-06-19 12:35:29
DBD :: ODBC当然支持table_info。您需要阅读ODBC规范,了解您需要传递给table_info的内容。您可能还需要1.46_1中的错误修复 - 请参阅http://search.cpan.org/~mjevans/DBD-ODBC-1.46_2/Changes#1.46_1_2013-11-16 – bohica 2014-02-14 09:00:28
这是有效的。
创建数据库:
echo 'create table foo (bar integer primary key, quux varchar(30));' | sqlite3 foobar.sqlite
Perl程序打印模式:
use 5.010;
use Data::Dumper qw(Dumper);
use DBIx::Class::Schema::Loader qw();
DBIx::Class::Schema::Loader->naming('current');
DBIx::Class::Schema::Loader->use_namespaces(1);
my $dbi_dsn = 'dbi:SQLite:dbname=foobar.sqlite';
my ($dbi_user, $dbi_pass);
my $schema = DBIx::Class::Schema::Loader->connect(
$dbi_dsn, $dbi_user, $dbi_pass, {'AutoCommit' => 1, 'RaiseError' => 1,}
);
for my $source_name ($schema->sources) {
say "*** Source: $source_name";
my $result_source = $schema->source($source_name);
for my $column_name ($result_source->columns) {
say "Column: $column_name";
say Dumper $result_source->column_info($column_name);
}
}
输出:
*** Source: Foo
Column: bar
$VAR1 = {
'data_type' => 'integer',
'is_auto_increment' => 1,
'is_nullable' => 1
};
Column: quux
$VAR1 = {
'data_type' => 'varchar',
'is_nullable' => 1,
'size' => 30
};
使用ODBC Oracle数据库,我不得不使用上阿尼叔叔的回答这种变化:尝试使用selectcol_arrayref($sth, ...)
当
my $table_info = $dbh->table_info(undef, '%', undef);
my $schemas = $table_info->fetchall_arrayref([1]);
print "Schemas :\n",
join("\n", map {$_->[0]} @$schemas), "\n";
否则,$schemas
将是不确定的。
- 1. 如何从Perl的DBI获取MySQL查询的结果?
- 2. Perl DBI与MySQL:如何从存储过程获取返回值?
- 3. 如何从Perl MySQL DBI句柄获取数据库名称?
- 4. 使用Perl获取所有记录DBI
- 5. 如何使用DBI包获取数据库模式
- 6. Perl模拟Net :: DBI fetchall_arrayref()
- 7. Perl模块:MySQL vs DBI
- 8. Perl DBI - 捕获错误
- 9. Perl的DBI fetchall_hashref
- 10. Perl DBI DBD :: mysql从mysql服务器获取数据库名称
- 11. 如何使perl DBI中的mysql_read_default_group工作
- 12. Perl DBI取数据库的一部分?
- 13. 无法连接用perl DBI模块
- 14. 安装DBI Perl模块时出错
- 15. 用Perl DBI模块关系表
- 16. Perl - DBI - MySQL - 更新后获取行ID的简单方法?
- 17. Perl DBI Oracle like wilddcard
- 18. Perl DBI常量 - 如何访问?
- 19. Perl的DBI - 忽略输出
- 20. 加快perl的DBI fetchrow_hashref
- 21. Perl的DBI数组 - 拆分
- 22. Perl:如何获取所有分组模式
- 23. 如何使用Perl以某种模式获取子字符串?
- 24. Perl:遍历目录并从文件中获取模式
- 25. Perl DBI - 并行事务
- 26. Perl Dbi和存储过程
- 27. Perl DBI插入并选择
- 28. 用Perl(DBI)引用列(MySQL)
- 29. 解释Perl DBI MySQL column_info()
- 30. DBD :: Oracle和DBI错误perl
http://dbi.perl.org/ – Ether 2010-05-25 14:53:37