【问题标题】:lost ipython history - database locked丢失 ipython 历史记录 - 数据库锁定
【发布时间】:2020-03-24 18:43:10
【问题描述】:

正在使用 ipython 历史命令,尝试结合 -l 和 -g 来搜索有限数量的历史,并使用 -n 来查看命令来自哪个会话。

突然我收到一个错误(我希望我的屏幕上仍然有确切的文本)......关于历史线程遇到的错误并停止,并且不会保存更多历史记录。它还谈到了“数据库锁定”。在那之后,%history 不会回忆任何历史记录。

所以我停止并重新启动了 ipython,发现它只有来自新重新启动的会话的历史记录。我停止并再次重新启动,甚至尝试关闭并重新打开我的 WSL-Ubuntu 窗口,但没有成功。看来我失去了几个月和几个月的历史。

然后我决定查找 ipython 历史文件,发现了这个小宝石:

dino@DINO:~$ ls -l $( ipython locate profile default )
total 14132
drwxrwxrwx 1 dino dino      512 Jul 17  2019 db
-rw-r--r-- 1 dino dino 14442496 Mar 24 14:16 history-corrupt-2020-03-24T14.17.27.480963.sqlite
-rw-r--r-- 1 dino dino    28672 Mar 24 14:24 history.sqlite
drwxrwxrwx 1 dino dino      512 Mar 18  2019 log
drwx------ 1 dino dino      512 Mar 18  2019 pid
drwx------ 1 dino dino      512 Mar 18  2019 security
drwxrwxrwx 1 dino dino      512 Mar 18  2019 startup

哇!看看! 14442496 Mar 24 14:16 history-corrupt-2020-03-24T14.17.27.480963.sqlite 看起来 ipython 毕竟实际上保存了所有的历史! 现在的问题是,有没有人知道如何从 sqlite 文件中找到并删除损坏并恢复我的全部或大部分历史记录?

【问题讨论】:

    标签: sqlite ipython ipython-magic


    【解决方案1】:

    是的,我修好了!所以这就是我所做的。通过谷歌搜索,我找到了this program called "sqlitebrowser"this other page with a section titled "How to Repair SQLite database?",这解释了您有时可以通过将数据库导出到 SQL 文件,然后导入 SQL 文件以创建新版本的数据库来修复 SQLite 数据库.

    所以我尝试了,但是,当我导入 SQL 文件时,我收到一条错误消息,说它由于“会话”表上的 UNIQUE 约束而失败,并且它正在展开事务。

    不幸的是,当我完成导出到 SQL 时,我选择了将插入分组到尽可能少的 SQL 命令中的选项,因此展开取消了整个“会话”表。后来我意识到,如果我没有对插入进行分组,也许那个 import 已经修复了数据库(只是在那些包含重复会话的事务上失败)。

    然而,当时我还不确定发生了什么,也没有想过返回并重新导出以重新生成带有大量单独插入的 SQL。

    相反,我选择在 SQL 文件中查找“会话”表上的任何重复插入。事实上,通过一些sedsort 命令(sort vs sort -u,然后是diff),我能够确定会话 227 到 236 以某种方式在那里两次!

    所以我从 SQL 文件中删除了重复项,然后再次使用 sqlitebrowser 导入 SQL 文件并重新创建 IPythonhistory.sqlite 文件。 然后我运行 ipython,发现 %history magic 再次能够访问我的所有历史记录。

    如果这个答案对任何人有帮助,请通过评论和/或投票告诉我。一切顺利。

    【讨论】:

      猜你喜欢
      • 2013-07-13
      • 1970-01-01
      • 2012-08-06
      • 2012-11-05
      • 1970-01-01
      • 2012-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多