Estoy usando DBI para consultar una base de datos SQLite3. Lo que tengo funciona, pero no devuelve las columnas en orden. Ejemplo:¿Cómo puedo obtener los nombres de las columnas y los datos de las filas en orden con DBI en 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)
Sé que esto está sucediendo porque estoy usando un hash, pero de qué otra manera puedo obtener los nombres de las columnas del artículo si sólo utilizo una matriz? Todo lo que quiero hacer es obtener algo como esto para cualquier arbitraria consulta:
col1, col2, col3, col4
1, 2, 3, 4
1, 2, 3, 4
1, 2, 3, 4
1, 2, 3, 4
...
(Es decir, necesito la salida está en el orden correcto y con los nombres de las columnas.)
I' Soy un principiante de Perl, pero realmente pensé que sería un problema simple. (He hecho esto antes en Ruby y PHP, pero tengo problemas para encontrar lo que busco en la documentación de Perl.)
Aquí hay una versión simplificada de lo que tengo en este 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;
Lo sentimos, no está seguro de por qué esto se bajó votó. Por favor, deje un comentario si cree que podría mejorarse. –