上下文:我目前正在使用python为一系列sqlite3数据库编写搜索功能,并且想知道在带sqlite3的python 3.7中是否可以实现以下功能。
我有三个数据库(设备,工具,景观)
这三个数据库中的每个表都具有完全相同的架构,即: (form_id(KEY),名称,项目,用途,成本,序列号,日期,附件,注释)
目标是让前端用户在搜索字段中键入一个字符串,然后按Enter键,他们输入的字符串将被传递到后端的此函数中,该函数将其与一组特定列进行比较。
我的伪代码,用于在数据库中搜索一组定义的列上的给定字符串,如下所示:
遍历每个数据库(共有3个)
浏览打开的数据库中的每个表
从表中选择表格ID,名称,项目,序列,注释,其中名称,项目,序列或注释类似于%search_str%
如果找到,请将(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)搜索的特定字符串。任何建议或指导将不胜感激。谢谢。