搜索Sqlite数据库 - 所有表和列

时间:2012-11-22 14:11:56

标签: python sqlite search

是否有可用于搜索Sqlite数据库的所有表和列的库或开源实用程序?唯一的输入是sqlite DB文件的名称。

我正在尝试编写取证工具,并希望在sqlite文件中搜索特定的字符串。

4 个答案:

答案 0 :(得分:8)

您可以使用"SELECT name FROM sqlite_master WHERE type='table'" 找出数据库中表的名称。从那里可以很容易地选择每个表的所有行。

例如:

import sqlite3
import os

filename = ...
with sqlite3.connect(filename) as conn:
    conn.row_factory = sqlite3.Row
    cursor = conn.cursor()    
    cursor.execute("SELECT name FROM sqlite_master WHERE type='table'")
    for tablerow in cursor.fetchall():
        table = tablerow[0]
        cursor.execute("SELECT * FROM {t}".format(t = table))
        for row in cursor:
            for field in row.keys():
                print(table, field, row[field])

答案 1 :(得分:1)

只需转储数据库并搜索即可。

% sqlite3 file_name .dump | grep 'my_search_string'

您可以改为通过 less 使用管道,然后使用 / 进行搜索:

% sqlite3 file_name .dump | less

答案 2 :(得分:0)

我知道聚会晚了,但是我遇到了类似的问题,但是由于它在docker映像中,所以我无法访问python,所以我这样解决了它:

for X in $(sqlite3 database.db .tables) ; do sqlite3 database.db "SELECT * FROM $X;" | grep >/dev/null 'STRING I WANT' && echo $X; done

这将遍历数据库文件中的所有表并执行全选操作,然后我对该字符串进行grep。如果找到了字符串,它将打印表,然后从那里我可以简单地使用sqlite3来查找其用法。

认为这可能对其他无法使用python的人有所帮助。

答案 3 :(得分:0)

@MrWorf的答案不适用于我的sqlite文件(Evernote的.exb文件),但是这种相似的方法有效:

  • 使用DB Browser for SQLite sqlitebrowser mynotes.exb
  • 打开文件
  • 文件/导出到SQL文件(将创建mynotes.exb.sql)
  • grep 'STRING I WANT" mynotes.exb.sql