作为通过 sqlite 结果的步骤将文本数据多次插入文本小部件的正确方法?
Proper method of performing multiple inserts of textual data into text widget as step through sqlite results?
我正在尝试从 SQLite 中提取多行文本数据并向其添加标签以显示在 Tk 文本小部件中。
如果我在浏览器中做类似的事情,我会在文档片段中构建元素,然后将片段添加到 DOM,而不是多次写入 DOM . Tk 中是否有等效的方法;或者在 Tcl 中的数据库结果循环中重复执行插入是否有效,相当于 C API 中的 sqlite3_step?
例如(查询返回的此类行可能多达数百行)
db1 eval {SELECT * FROM table ...} {
.widget insert end $column_1 "tag_1 tag_x"
.widget insert end $column_2 "tag_2 tag_y"
.widget insert end $column_3\n "tag_3 tag_x"
}
或者,是否应该尝试在 SQL 中使用类似 GROUP_CONCAT
的东西来构建单个语句以在 Tcl 中求值?
谢谢。
下面是一个更具体的例子。一节经文的数据由数据库中的多行组成;而且,大多数情况下,会一次提取许多经文。我需要标记 strongs_no
列,以便将其设置为上标样式。
如果我只是 select 行,那么会有很多插入;但是,如果我在 SQL 中使用 group_concat
,那么我不知道如何添加标签。
如果可能的话,返回的每一节经文仍然会有一个插入。
book_no chapter_no verse_no index_no strongs_no kjv_text
------- ---------- -------- -------- ---------- ----------------
1 1 1 1 H7225 In the beginning
1 1 1 2 H430 God
1 1 1 3 H1254 created
1 1 1 4 H853
1 1 1 5 H8064 the heaven
1 1 1 6 H853 and
1 1 1 7 H776 the earth.
select group_concat( kjv_text || strongs_no, ' ') as kjv
from blb_kjv_text
where book_no=1
and chapter_no=1
and verse_no=1
kjv
---------------------------------------------------------------------
In the beginningH7225 GodH430 createdH1254 H853 the heavenH8064 andH853 the earth.H776
如果您想对文本的每个跨度应用不同的标签,使用多次 insert
调用可能是最简单的方法。单独来看,它们并不是很昂贵(测量和渲染是昂贵的部分,但它们会被推迟到应用程序空闲时,因此您在大多数应用程序中看不到真正的成本)。如果您不在最后插入,请设置您自己的自定义标记(默认向右重力)并在此处进行插入;它的惊喜最少。
我真的不会在 SQL 中执行 GROUP_CONCAT
除非有其他一些与查询相关的原因,因为 Tcl 非常擅长文本操作。
我正在尝试从 SQLite 中提取多行文本数据并向其添加标签以显示在 Tk 文本小部件中。
如果我在浏览器中做类似的事情,我会在文档片段中构建元素,然后将片段添加到 DOM,而不是多次写入 DOM . Tk 中是否有等效的方法;或者在 Tcl 中的数据库结果循环中重复执行插入是否有效,相当于 C API 中的 sqlite3_step?
例如(查询返回的此类行可能多达数百行)
db1 eval {SELECT * FROM table ...} {
.widget insert end $column_1 "tag_1 tag_x"
.widget insert end $column_2 "tag_2 tag_y"
.widget insert end $column_3\n "tag_3 tag_x"
}
或者,是否应该尝试在 SQL 中使用类似 GROUP_CONCAT
的东西来构建单个语句以在 Tcl 中求值?
谢谢。
下面是一个更具体的例子。一节经文的数据由数据库中的多行组成;而且,大多数情况下,会一次提取许多经文。我需要标记 strongs_no
列,以便将其设置为上标样式。
如果我只是 select 行,那么会有很多插入;但是,如果我在 SQL 中使用 group_concat
,那么我不知道如何添加标签。
如果可能的话,返回的每一节经文仍然会有一个插入。
book_no chapter_no verse_no index_no strongs_no kjv_text
------- ---------- -------- -------- ---------- ----------------
1 1 1 1 H7225 In the beginning
1 1 1 2 H430 God
1 1 1 3 H1254 created
1 1 1 4 H853
1 1 1 5 H8064 the heaven
1 1 1 6 H853 and
1 1 1 7 H776 the earth.
select group_concat( kjv_text || strongs_no, ' ') as kjv
from blb_kjv_text
where book_no=1
and chapter_no=1
and verse_no=1
kjv
---------------------------------------------------------------------
In the beginningH7225 GodH430 createdH1254 H853 the heavenH8064 andH853 the earth.H776
如果您想对文本的每个跨度应用不同的标签,使用多次 insert
调用可能是最简单的方法。单独来看,它们并不是很昂贵(测量和渲染是昂贵的部分,但它们会被推迟到应用程序空闲时,因此您在大多数应用程序中看不到真正的成本)。如果您不在最后插入,请设置您自己的自定义标记(默认向右重力)并在此处进行插入;它的惊喜最少。
我真的不会在 SQL 中执行 GROUP_CONCAT
除非有其他一些与查询相关的原因,因为 Tcl 非常擅长文本操作。