Как получить список имен столбцов - PullRequest
54 голосов
/ 26 марта 2009

Можно получить строку со всеми именами столбцов таблицы следующим образом:

|id|foo|bar|age|street|address|

Я не люблю использовать Pragma table_info(bla).

Ответы [ 10 ]

84 голосов
/ 26 марта 2009
SELECT sql FROM sqlite_master
WHERE tbl_name = 'table_name' AND type = 'table'

Затем проанализируйте это значение с помощью Reg Exp (это легко), которое может выглядеть примерно так: [(.*?)]

В качестве альтернативы вы можете использовать:

PRAGMA table_info(table_name)
31 голосов
/ 26 января 2015

Если вы используете оболочку командной строки для SQLite, тогда .headers on перед выполнением запроса. Вам нужно сделать это только один раз за данный сеанс.

6 голосов
/ 08 декабря 2011

Это помогает для 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;
});

Вы можете повторно использовать регулярные выражения на своем языке, чтобы получить имена столбцов.

Короче Альтернатива:

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;
});
2 голосов
/ 31 октября 2018

Да, вы можете достичь этого с помощью следующих команд:

sqlite> .headers on
sqlite> .mode column

Результат выбора на вашем столе будет выглядеть следующим образом:

id          foo         bar         age         street      address
----------  ----------  ----------  ----------  ----------  ----------
1           val1        val2        val3        val4        val5
2           val6        val7        val8        val9        val10
1 голос
/ 25 июня 2015

Результирующий набор запросов в PHP предлагает несколько функций, позволяющих просто:

    numCols() 
    columnName(int $column_number )

Пример

    $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;
    }
0 голосов
/ 01 февраля 2019

Использовать рекурсивный запрос. Учитывая

create table t (a int, b int, c int);

Пробег:

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;

В качестве альтернативы просто используйте group_concat:

select '|' || group_concat(name, '|') || '|' from pragma_table_info('t')

Оба дают:

|a|b|c|
0 голосов
/ 27 октября 2018

Самый простой способ получить имена столбцов последнего выполненного SELECT - использовать свойство курсора description. Пример 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)
0 голосов
/ 13 мая 2017

Попробуйте этот синтаксический анализатор таблиц sqlite, я реализовал синтаксический анализатор таблиц sqlite для анализа определений таблиц в PHP.

Возвращает полные определения (уникальный, первичный ключ, тип, точность, не ноль, ссылки, ограничения таблицы ... и т. Д.)

https://github.com/maghead/sqlite-parser

0 голосов
/ 10 ноября 2013

Используя ответ @ Tarkus, вот регулярные выражения, которые я использовал в 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
}

Код несколько небрежный, но, похоже, работает.

0 голосов
/ 10 октября 2011
$<?
$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";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...