我正在使用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 MySQL DBI句柄獲取數據庫名稱?
- 3. Perl DBI與MySQL:如何從存儲過程獲取返回值?
- 4. 使用Perl獲取所有記錄DBI
- 5. 如何使用DBI包獲取數據庫模式
- 6. Perl模擬Net :: DBI fetchall_arrayref()
- 7. Perl模塊:MySQL vs DBI
- 8. PERL 5.8.4安裝DBI模塊
- 9. Perl DBI - 捕獲錯誤
- 10. 如何在Perl DBI中獲取動態SQL輸出?
- 11. Perl的DBI fetchall_hashref
- 12. 幫助從perl dbi獲取輸出代碼
- 13. Perl DBI DBD :: mysql從mysql服務器獲取數據庫名稱
- 14. Perl DBI no prepare
- 15. Perl的DBI對待繼承DBI
- 16. 如何使perl DBI中的mysql_read_default_group工作
- 17. Perl DBI取數據庫的一部分?
- 18. perl從模式
- 19. 如何在Heroku機器上安裝Perl的DBI模塊
- 20. 無法連接用perl DBI模塊
- 21. 用Perl DBI模塊關係表
- 22. 安裝DBI Perl模塊時出錯
- 23. 獲取列名的索引號用Perl DBI
- 24. Perl - DBI - MySQL - 更新後獲取行ID的簡單方法?
- 25. Perl DBI mysql更新
- 26. Perl DBI替代LongReadLen
- 27. Perl DBI fetchrow_array問題
- 28. Perl DBI Oracle like wilddcard
- 29. Perl DBI常量 - 如何訪問?
- 30. Perl的DBI/Perl的DBD-Oracle安裝
http://dbi.perl.org/ – Ether 2010-05-25 14:53:37