首页 > 解决方案 > 在 Python 中搜索多个 SQlite db 以查找列集中的特定字符串的有效方法?

问题描述

上下文:我目前正在为 python 中的一系列 sqlite3 数据库编写搜索功能,并且想知道在带有 sqlite3 的 python 3.7 中是否可以使用以下功能。

我有三个数据库(设备、工具、景观)

这三个数据库中的每个表都具有完全相同的架构,分别是:(form_id (KEY)、名称、项目、用途、成本、序列、日期、附件、注释)

目标是让前端的用户在搜索字段中输入一个字符串,然后按回车键,他们输入的字符串将被传递给后端的这个函数,该函数会将其与一组特定的列进行比较。

我用于在定义的一组列上搜索给定字符串的数据库的伪代码如下所示:

def 搜索(search_str,数据库):

  1. 循环遍历每个数据库(总共有 3 个)

  2. 循环访问打开的数据库中的每个表

  3. SELECT form_id, name, item, serial, notes FROM table WHERE name, item, serial or note is like %search_str%

  4. 如果找到,将 (form_id, name, item, serial, note) 附加到字典

继续...

我有以下代码:

def search_index(search_str, databases):
json_str = []

for database in databases:
    conn = sqlite3.connect(database)
    conn.row_factory = sqlite3.Row
    c = conn.cursor()
    for tablerow in c.execute("SELECT name FROM sqlite_master WHERE type='table' AND name != 'sqlite_sequence'").fetchall():
        table = tablerow[0]
        c.execute("SELECT * FROM {}".format(table))
        for row in c:
            print(row)
            for field in row.keys():
                #Here I would append the appropriate data
                json_str.append(field)
     conn.close()
return json_str

到目前为止,第二个执行查询:

c.execute("SELECT * FROM {}".format(table))

不会接受任何列名,因为我认为它们超出了范围,因为 table 参数被迭代并且直到运行时才知道。

这是我应该如何解决这个问题吗?我觉得有一种更简单的方法可以在我的所有数据库中搜索不涉及 O(N) 搜索的特定字符串。任何建议或指导将不胜感激。谢谢。

标签: pythondatabasesqlite

解决方案


推荐阅读