gpt4 book ai didi

database - Perl - 使用 DBI 获取 sqlite 数据库的结构

转载 作者:搜寻专家 更新时间:2023-10-30 22:05:47 24 4
gpt4 key购买 nike

我需要测试我的 SQLite 数据库的结构,它由一个唯一的表组成,假设有 2 列(id、名称)。我无法弄清楚 SQL 查询来获取我的数据库的表模式。

我能够使用 DBI 方法 selectall_arrayref() 获取数据库的所有内容。但是它只返回一个包含我数据库中的值的数组。此信息很有用,但我想要一个 SQL 查询,它返回类似 id, name 的内容(基本上是表模式)。

我尝试了以下查询:SHOW COLUMNS FROM $tablename 还有 SELECT * from $tablename(这个返回所有表内容)。

到目前为止,这是我的实现:

# database path
my $db_path = "/my/path/to/.database.sqlite";
my $tablename = "table_name";

sub connect_to_database {

# Connect to the database
my $dbh = DBI->connect ("dbi:SQLite:dbname=$db_path", "", "",
{ RaiseError => 1, AutoCommit => 0 },
)
or confess $DBI::errstr;
return $dbh;
}

sub get_database_structure {

# Connect to the database
my $dbh = &connect_to_database();

# Get the structure of the database
my $sth = $dbh->prepare("SHOW COLUMNS FROM $tablename");
$sth->execute();
while (my $inphash = $sth->fetrow_hashref()) {
print $inphash."\n";
}

# Disconnect from the database
$dbh->disconnect();
}

# Call the sub to print the database structure
&get_database_structure();

我希望输出是我的表的结构 id, name 但我引发了一个错误:DBD::SQLite::db prepare failed: near "SHOW": syntax错误

我找不到合适的查询。任何意见或帮助将不胜感激。

谢谢!

最佳答案

您正在寻找的实际上只是针对表和列信息的 SQL 精简版查询。本回答SQLite Schema Information Metadata如果此查询对您不起作用,则有完整的详细信息,但假设您使用的是其中一个答案中提到的“最新”版本,您可以执行以下操作:

# Get the structure of the database
my $sth = $dbh->prepare("<<END_SQL");
SELECT
m.name as table_name,
p.name as column_name
FROM sqlite_master AS m
JOIN pragma_table_info(m.name) AS p
ORDER BY m.name, p.cid
END_SQL
$sth->execute();
my $last = '';
while (my $row = $sth->fetchrow_arrayref()) {
my ($table, $column) = @$row;
if ($table ne $last) {
print "=== $table ===\n";
$last = $table;
}
print "$column\n";
}

关于database - Perl - 使用 DBI 获取 sqlite 数据库的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55399516/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com