【问题标题】:import SQL Table to FTS4 virtual table将 SQL 表导入 FTS4 虚拟表
【发布时间】:2017-05-31 15:41:33
【问题描述】:

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

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

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

那么,创建虚拟表并将内容从 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 所说,这个语法试图将这个随机数的列导入到创建的默认列中。

那么最好的方法是什么?

我可以使用以下方法获取我的 -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))

【问题讨论】:

  • 您真的要索引所有 21 列吗?以及数据库应该如何知道你想要多少列?
  • @CL:这就是我提问的目的。我是 SQLite(和 DB)的新手。所以我必须指定要在我的虚拟表中创建的列数?如果是,语法是什么? - 因为我不知道我的脚本将创建的列数,因为我最初不知道我的学生的所有特征。
  • 你不知道你的表有哪些列吗?
  • 没有。应用程序动态创建 Db 并在之后将其删除。从一个 Api 调用到另一个,此 App 每次调用都会创建不同数量的列。
  • 您是在问如何找出一个表有哪些列,或者如何创建一个 FTS 表?

标签: database sqlite database-design


【解决方案1】:

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

虚拟表应包含您要在其中进行全文搜索的那些列。要创建它,请构造一个表单字符串

CREATE VIRTAL TABLE name USING FTS4(key, metadata_0, and_so_on)

【讨论】:

  • 我在将问题发送给 SO 之前去了那里。不确定我的问题是在创建上,而是在填充我的虚拟数据库上。所以我必须找到一种方法来获取我的列的内容和初始数据库中的列数,然后根据这个列数递归地填充我的虚拟数据库。 ?
猜你喜欢
  • 1970-01-01
  • 2015-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-20
  • 2011-03-11
相关资源
最近更新 更多