我想以.schema的方式檢索sqlite數據庫模式信息,但使用Perl DBI。第一次嘗試是用$dbh->tables
檢索表名,但我獲得了重複的表名。它們是表格本身的一個條目,每個索引有一個條目(table_a有3個索引和b個),這背後的基本原理是什麼?
DB<7> x $dbh->tables;
0 '"main"."table_a"'
1 '"main"."table_a"'
2 '"main"."table_a"'
3 '"main"."table_b"'
4 '"main"."sqlite_master"'
5 '"temp"."sqlite_temp_master"'
6 '"main"."table_a"'
7 '"main"."table_b"'
我將不勝感激是有人可以給出提示這三個相關的問題:如何 可以只獲得表(而不做uniq的),爲什麼有一排每個索引? 如何獲取索引信息? 和所有在一起,如何獲得.schema的等效信息?
[upate]我已經看到,在DBI 1.627
@names = $dbh->tables; # deprecated
但它並沒有提到爲什麼。
,他們建議使用
@names = $dbh->tables($catalog, $schema, $table, $type);
但讀DBI table_info,在此PARAMS解釋後,我還沒有完全理解如何填充它們獲得的表的信息,以獲得表名只有一次,或者如果它可以擁有所有,與.schema相同的信息。
任何例子或更詳細的用法鏈接將不勝感激。
[更新]]
只是以供將來參考這些都是阻止我由我自己去尋找答案,詢問這裏前兩個問題:
1 - 谷歌直接我一個非常古老的DBD-SQLite的文檔在它幾乎沒有,我沒有在頁面頂部的注意鏈接到最新版本的頁面。
2-之前問我在這裏大約table_info(正確答案),但作爲幾年其他線程讀取,而無需編寫代碼DBI我落在新人的一個陷阱。作爲$ dbh->表返回一個數組,我沒注意那個table_info返回語句處理程序,試圖在調試器x $dbh->table_info(...)
並獲得一個空的哈希我卡住了,所以當。我忘記了需要調用返回的$ sth的獲取部分。
達姆就谷歌! ;-)。我從谷歌去DBD-sqlite,並且在http://search.cpan.org/~msergeant/DBD-SQLite-0.31/lib/DBD/SQLite.pm結束,那裏的信息幾乎沒有。我會問你從哪裏獲得信息,並掃描頁面的所有角落,我意識到在我的dbd-sqlite頁面的頂部行是'最新版本1.39'。現在我處於正確的文檔頁面。感謝您的示例,並幫助我認識到我處於錯誤的文檔頁面。 –