如何获取列名称的列表
有可能获得一个像这样的表的所有列名称的行:
|id|foo|bar|age|street|address|
我不喜欢用Pragma table_info(bla)
。
SELECT sql FROM sqlite_master WHERE tbl_name = 'table_name' AND type = 'table'
然后用Reg Expparsing这个值(这很容易),看起来类似于这个: [(.*?)]
或者,您可以使用:
PRAGMA table_info(table_name)
如果您在执行查询之前将命令行shell用于SQLite,则使用.headers on
。 你只需要在给定的会话中做一次。
这有助于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; });
您可以重复使用您的语言的正则expression式来获取列名称。
更短的select:
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; });
$<? $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"; }
使用@ Tarkus的答案,这里是我在R中使用的正则expression式:
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 }
代码有点草率,但它似乎工作。
在PHP中查询的结果集提供了几个function,只是这样做:
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; }
试试这个sqlite表模式parsing器,我实现了sqlite表parsing器来parsingPHP中的表定义。
它返回完整的定义(唯一的,主键,types,精度,非空,引用,表约束…等)