Sto utilizzando DBI per interrogare un database SQLite3. Quello che ho funziona, ma non restituisce le colonne in ordine. Esempio:Come posso ottenere i nomi delle colonne e i dati delle righe in ordine con DBI in Perl?
Query: select col1, col2, col3, col4 from some_view;
Output:
col3, col2, col1, col4
3, 2, 1, 4
3, 2, 1, 4
3, 2, 1, 4
3, 2, 1, 4
...
(values and columns are just for illustration)
So che questo sta accadendo perché sto utilizzando un hash, ma in quale altro modo ottengo i nomi delle colonne indietro se io uso solo un array? Tutto quello che voglio fare è ottenere qualcosa di simile per qualsiasi richiesta arbitraria:
col1, col2, col3, col4
1, 2, 3, 4
1, 2, 3, 4
1, 2, 3, 4
1, 2, 3, 4
...
(Cioè, mi serve l'uscita è nel giusto ordine e con i nomi delle colonne.)
I' Sono molto un novizio Perl, ma ho davvero pensato che sarebbe stato un problema semplice. (L'ho già fatto in Ruby e PHP, ma ho problemi a rintracciare ciò che sto cercando nella documentazione Perl.)
Ecco una versione ridotta di ciò che ho al momento:
use Data::Dumper;
use DBI;
my $database_path = '~/path/to/db.sqlite3';
$database = DBI->connect(
"dbi:SQLite:dbname=$database_path",
"",
"",
{
RaiseError => 1,
AutoCommit => 0,
}
) or die "Couldn't connect to database: " . DBI->errstr;
my $result = $database->prepare('select col1, col2, col3, col4 from some_view;')
or die "Couldn't prepare query: " . $database->errstr;
$result->execute
or die "Couldn't execute query: " . $result->errstr;
###########################################################################################
# What goes here to print the fields that I requested in the query?
# It can be totally arbitrary or '*' -- "col1, col2, col3, col4" is just for illustration.
# I would expect it to be called something like $result->fields
###########################################################################################
while (my $row = $result->fetchrow_hashref) {
my $csv = join(',', values %$row);
print "$csv\n";
}
$result->finish;
$database->disconnect;
Spiacente, non so perché questa scese votato. Si prega di lasciare un commento se si pensa che potrebbe essere migliorato. –