可以获得一个包含表的所有列名的行,如下所示:
|id|foo|bar|age|street|address|
我不喜欢使用Pragma table_info(bla)
。
答案 0 :(得分:83)
SELECT sql FROM sqlite_master
WHERE tbl_name = 'table_name' AND type = 'table'
然后使用Reg Exp(很容易)解析这个值,它看起来与此类似:[(.*?)]
或者您也可以使用:
PRAGMA table_info(table_name)
答案 1 :(得分:31)
如果在执行查询之前使用命令行shell到SQLite,那么.headers on
。您只需在给定的会话中执行此操作一次。
答案 2 :(得分:6)
这有助于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;
});
答案 3 :(得分:2)
是的,您可以使用以下命令来实现:
sqlite> .headers on
sqlite> .mode column
表格上的选择结果将如下所示:
id foo bar age street address
---------- ---------- ---------- ---------- ---------- ----------
1 val1 val2 val3 val4 val5
2 val6 val7 val8 val9 val10
答案 4 :(得分:2)
您可以在如下所示的sqlite中使用与编译指示相关的命令
pragma table_info("table_name")
--Alternatively
select * from pragma_table_info("table_name")
如果您需要诸如id|foo|bar|age|street|address
之类的列名,那么基本上您的答案就在下面的查询中。
select group_concat(name,'|') from pragma_table_info("table_name")
答案 5 :(得分:1)
PHP中的查询结果集提供了几个允许这样的功能:
[alias]
# Move forward/Backward
fw = "!git log --pretty=oneline --all | grep -B1 `git rev-parse HEAD` | head -n1 | egrep -o '[a-f0-9]{20,}' | xargs git checkout"
bw = "!git checkout HEAD~1"
实施例
numCols()
columnName(int $column_number )
答案 6 :(得分:0)
$<?
$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";
}
答案 7 :(得分:0)
使用@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
}
代码有点草率,但似乎有效。
答案 8 :(得分:0)
试试这个sqlite表模式解析器,我实现了sqlite表解析器,用于解析PHP中的表定义。
它返回完整定义(唯一,主键,类型,精度,非空,引用,表约束......等)
答案 9 :(得分:0)
获取最近执行的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)
答案 10 :(得分:0)
使用递归查询。给定
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|