首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >丢失ipython历史记录-数据库锁定

丢失ipython历史记录-数据库锁定
EN

Stack Overflow用户
提问于 2020-03-24 18:43:10
回答 1查看 666关注 0票数 0

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

突然,我发现了一个错误(我希望我的屏幕上还有准确的文本).一些关于历史线程遇到的错误和停止,不会保存更多的历史记录。它还提到了一些关于“数据库锁定”的内容。在此之后,%历史记录将不记得任何历史记录。

因此,我停止并重新启动了ipython,发现它只具有新重新启动的会话的历史记录。我停下来,重新开始,甚至尝试关闭和重新打开我的WSL-Ubuntu窗口,没有运气。看来我失去了几个月的历史。

然后,我决定查找ipython历史文件,并找到了这个小创业板:

代码语言:javascript
复制
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看起来真的保存了所有的历史!现在的问题是,有谁知道我如何从sqlite文件中找到并清除腐败并恢复我的全部或大部分历史??

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-25 03:32:31

耶,我修好了!所以我就是这么做的。通过谷歌搜索,我找到了这个叫做"sqlitebrowser“的程序,我找到了另一个页面的标题是“如何修复SQLite数据库?”,它解释说,有时可以通过将数据库导出到SQL文件,然后导入SQL文件来创建数据库的新版本,从而修复SQLite数据库。

所以我尝试了一下,但是当我导入SQL文件时,我发现了一个错误,它由于对"sessions“表的唯一约束而失败,并且它正在解除事务。

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

但是,当时我还不确定发生了什么,也不认为返回并再导出来用大量的单独插入来重新生成SQL。

相反,我选择在SQL文件中查找“会话”表中的任何重复插入。实际上,使用一些sedsort命令(sort vs sort -u,然后是diff),我能够确定227到236号会话中有两次!

因此,我从SQL文件中删除了副本,然后再次使用sqlitebrowser导入SQL文件并重新创建IPython history.sqlite文件。然后运行ipython,发现%历史魔术再次能够访问我的所有历史记录。

如果这个答案对任何人有帮助的话,请告诉我一声评论和/或投票表决。万事如意。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60837351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档