在Python中搜索多个SQlite数据库以查找列集中的特定字符串的有效方法?

时间:2018-08-04 02:25:00

标签: python database sqlite

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

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

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

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

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

def搜索(search_str,数据库):

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

  2. 浏览打开的数据库中的每个表

  3. 从表中选择表格ID,名称,项目,序列,注释,其中名称,项目,序列或注释类似于%search_str%

  4. 如果找到,请将(form_id,名称,项目,序列号,注释)附加到字典中

继续...

我有以下代码:

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)搜索的特定字符串。任何建议或指导将不胜感激。谢谢。

0 个答案:

没有答案