将SQL表导入FTS4虚拟表

时间:2017-05-31 15:41:34

标签: database sqlite database-design

修改 我有一个python应用程序,在数据库中创建一个表。 它会创建一个随机数量的行。我不知道表中创建的行数。每行对应于我的图片的元数据,在下面的示例中,只创建了6行:

enter image description here

我想使用FTS4全文搜索功能来解析关键词的列。

到目前为止,我知道我需要创建一个虚拟表并将原始表中的所有内容导入到虚拟表中。使用this SO线程我理解我需要做:INSERT INTO bar SELECT * FROM other_table

那么,创建Virtual one并将CONTENTSEARCHINDEX表中的内容导入CONTENTSEARCHINDEXvirt虚拟表的语法是什么:

conn.execute('''CREATE VIRTUAL TABLE IF NOT EXISTS CONTENTSEARCHINDEXvirt USING FTS4;''')
conn.execute("INSERT INTO CONTENTSEARCHINDEXvirt SELECT * FROM CONTENTSEARCHINDEX")

我收到了这个错误:

sqlite3.OperationalError: table CONTENTSEARCHINDEXvirt has 1 columns but 7 values were supplied

正如CL所说,这种语法试图将这个随机数列导入到默认列中。

那么最好的方法是什么?

我可以使用以下命令获取列表my -unknown-:

# Listing the number of columns from initial DB as a list.
connection = sqlite3.connect(DBtoReadAndParse)
cursor = connection.execute('select * from CONTENTSEARCHINDEX;')
namescolumns = list(map(lambda x: x[0], cursor.description))

1 个答案:

答案 0 :(得分:0)

SQLite文档记录了如何创建FTS表:CREATE VIRTUAL TABLECreating and Destroying FTS Tables

虚拟表应包含要在其中进行全文搜索的列。要创建它,请构造一个形式为

的字符串
CREATE VIRTAL TABLE name USING FTS4(key, metadata_0, and_so_on)