【问题标题】:Search Sqlite Database - All Tables and Columns搜索 Sqlite 数据库 - 所有表和列
【发布时间】:2012-11-10 23:00:04
【问题描述】:

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

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

【问题讨论】:

    标签: python sqlite search


    【解决方案1】:

    只需转储数据库并搜索它。

    % sqlite3 file_name .dump | grep 'my_search_string'

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

    % sqlite3 file_name .dump | less

    【讨论】:

      【解决方案2】:

      @MrWorf 的回答不适用于我的 sqlite 文件(来自 Evernote 的 .exb 文件),但这种类似的方法有效:

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

      【讨论】:

        【解决方案3】:

        我知道聚会迟到了,但我遇到了类似的问题,但由于它位于 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 的人有所帮助。

        【讨论】:

          【解决方案4】:

          你可以使用"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])
          

          【讨论】:

          • 太棒了!我又多了一个问题——假设我正在表中搜索字符串“sms”,一旦找到——如何在上面的代码 sn-p 中打印列名 + 表名?
          • 我已将代码更改为使用sqlite3.Row 行工厂。这使得cursor 返回类似字典的行。行键是列名。
          猜你喜欢
          • 2018-09-08
          • 1970-01-01
          • 2012-08-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多