Tcl - SQLite -如何检索正确的Tcl结果集

rekjcdws  于 2023-03-08  发布在  SQLite
关注(0)|答案(1)|浏览(210)

我在我的早期阶段,而使用SQlite与TCL,所以请原谅我可能谦虚的问题:)。
问题:每当我在TCL中启动一个调用,如“select * from table”,我确实会得到请求的结果。但是,有一个问题。它没有记录分隔符,如“\n”,只有一个空格。因此,结果只是一个列表,带有“lindex 0”。
我可以使用“. separator ROW '\n'"选项来避免这种行为。不幸的是,TCL代码中没有该选项,因此“sqlite3.separator“\n”只会给出“missing database”错误,而此选项会处理sqlite3.exe w.o.问题。(有趣的是,选项“sqlite2.mode tcl”甚至在TCL中也可以工作)
如何获得正确的TCL结果(如“lindex of lindex”结果)?
尝试在TCL中使用任何可想到的方法设置“.separator”,但没有效果。

h43kikqp

h43kikqp1#

除了SQLite文档中的数组示例之外,这里还有一些其他简单的方法来处理SQLite生成的平面列表:

package require sqlite3

sqlite3 db1 :memory:
db1 nullvalue NULL

db1 eval {CREATE TABLE t1(a int, b text)}

db1 eval {INSERT INTO t1 VALUES(1,'hello')}
db1 eval {INSERT INTO t1 VALUES(2,'goodbye')}
db1 eval {INSERT INTO t1 VALUES(3,'howdy!')}
set x [db1 eval {SELECT * FROM t1 ORDER BY a}]

puts $x
>1 hello 2 goodbye 3 howdy!

foreach {a b} $x {
  puts "$a | $b"
}
>1 | hello  
>2 | goodbye
>3 | howdy!

foreach {a b} $x {
  set d [dict set d $a $b]
}
puts $d
>1 hello 2 goodbye 3 howdy!

for {set i 1} {$i < 4} {incr i} {
  puts [dict get $d $i]
}
>hello
>goodbye
>howdy!

对于短或窄的结果集,这些方法有时很方便。

相关问题