Il est possible d’obtenir une ligne avec tous les noms de colonne d’une table comme ceci:
|id|foo|bar|age|street|address|
Je n'aime pas utiliser Pragma table_info(bla)
.
SELECT sql FROM sqlite_master
WHERE tbl_name = 'table_name' AND type = 'table'
Ensuite, analysez cette valeur avec Reg Exp (c'est facile), ce qui pourrait ressembler à ceci: [(.*?)]
Sinon, vous pouvez utiliser:
PRAGMA table_info(table_name)
Si vous utilisez la ligne de commande Shell to SQLite, .headers on
avant d’effectuer votre requête. Vous n'avez besoin de le faire qu'une fois dans une session donnée.
Cela aide pour HTML5 SQLite:
tx.executeSql('SELECT name, sql FROM sqlite_master WHERE type="table" AND name = "your_table_name";', [], function (tx, results) {
var columnParts = results.rows.item(0).sql.replace(/^[^\(]+\(([^\)]+)\)/g, '$1').split(','); ///// RegEx
var columnNames = [];
for(i in columnParts) {
if(typeof columnParts[i] === 'string')
columnNames.Push(columnParts[i].split(" ")[0]);
}
console.log(columnNames);
///// Your code which uses the columnNames;
});
Vous pouvez réutiliser l'expression régulière dans votre langue pour obtenir les noms de colonne.
Alternative plus courte:
tx.executeSql('SELECT name, sql FROM sqlite_master WHERE type="table" AND name = "your_table_name";', [], function (tx, results) {
var columnNames = results.rows.item(0).sql.replace(/^[^\(]+\(([^\)]+)\)/g, '$1').replace(/ [^,]+/g, '').split(',');
console.log(columnNames);
///// Your code which uses the columnNames;
});
Oui, vous pouvez y parvenir en utilisant les commandes suivantes:
sqlite> .headers on
sqlite> .mode column
Le résultat d'une sélection sur votre table ressemblera alors à:
id foo bar age street address
---------- ---------- ---------- ---------- ---------- ----------
1 val1 val2 val3 val4 val5
2 val6 val7 val8 val9 val10
Le jeu de résultats d'une requête dans PHP offre quelques fonctions permettant justement cela:
numCols()
columnName(int $column_number )
Exemple
$db = new SQLIte3('mysqlite.db');
$table = 'mytable';
$tableCol = getColName($db, $table);
for ($i=0; $i<count($tableCol); $i++){
echo "Column $i = ".$tableCol[$i]."\n";
}
function getColName($db, $table){
$qry = "SELECT * FROM $table LIMIT 1";
$result = $db->query($qry);
$nCols = $result->numCols();
for ($i = 0; $i < $ncols; $i++) {
$colName[$i] = $result->columnName($i);
}
return $colName;
}
$<?
$db = sqlite_open('mysqlitedb');
$cols = sqlite_fetch_column_types('form name'$db, SQLITE_ASSOC);
foreach ($cols as $column => $type) {
echo "Column: $column Type: $type\n";
}
En utilisant la réponse de @ Tarkus, voici les expressions rationnelles que j'ai utilisées dans R:
getColNames <- function(conn, tableName) {
x <- dbGetQuery( conn, paste0("SELECT sql FROM sqlite_master WHERE tbl_name = '",tableName,"' AND type = 'table'") )[1,1]
x <- str_split(x,"\\n")[[1]][-1]
x <- sub("[()]","",x)
res <- gsub( '"',"",str_extract( x[1], '".+"' ) )
x <- x[-1]
x <- x[-length(x)]
res <- c( res, gsub( "\\t", "", str_extract( x, "\\t[0-9a-zA-Z_]+" ) ) )
res
}
Le code est un peu bâclé, mais il semble fonctionner.
Utilisez une requête récursive. Donné
create table t (a int, b int, c int);
Courir:
with recursive
a (cid, name) as (select cid, name from pragma_table_info('t')),
b (cid, name) as (
select cid, '|' || name || '|' from a where cid = 0
union all
select a.cid, b.name || a.name || '|' from a join b on a.cid = b.cid + 1
)
select name
from b
order by cid desc
limit 1;
Sinon, utilisez simplement group_concat
:
select '|' || group_concat(name, '|') || '|' from pragma_table_info('t')
Les deux donnent:
|a|b|c|
Essayez cet analyseur de schéma de table sqlite, j'ai mis en œuvre l'analyseur de table sqlite pour analyser les définitions de table en PHP.
Il renvoie les définitions complètes (unique, clé primaire, type, précision, non nul, références, contraintes de table, etc.)
Le moyen le plus simple d'obtenir les noms de colonne de la dernière commande SELECT exécutée consiste à utiliser la propriété description
du curseur. Un exemple en Python:
print_me = "("
for description in cursor.description:
print_me += description[0] + ", "
print(print_me[0:-2] + ')')
# Example output: (inp, output, reason, cond_cnt, loop_likely)