推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
omg21
V2EX  ›  Python

在出错时如何保存 sqlite 内存数据库中的记录?

  •  
  •   omg21 · Jan 20, 2017 · 3024 views
    This topic created in 3402 days ago, the information mentioned may be changed or developed.
    我的爬虫在工作的时候是从表里取地址,然后再获取数据,为了在某个地址出错以后重新执行时还从这里开始,我用另一个表来记录当前地址的 ID ,这样,下回直接从这里执行就可以了。
    我现在想把记录 ID 的这个步骤放到 sqlite 的内存数据库中,这样可以减轻硬盘的压力,可是如果在出错以后,内存数据库也就清空了,那么怎样能在出错时把当前内存数据库的记录保存下来呢?
    8 replies    2017-01-21 13:41:41 +08:00
    mkeith
        1
    mkeith  
       Jan 20, 2017
    你多大的数据库啊,硬盘吃不消吗?
    loading
        2
    loading  
       Jan 20, 2017 via Android
    只是解决你这个问题:

    使用普通模式,但是数据库保存在 ramdisk 。
    haitang
        3
    haitang  
       Jan 20, 2017
    降低读写次数的话,可以每隔一分钟或 N 条后保存即可,仅仅丢失一部分,我感觉应该可以接受。
    如果是提高读写效率,可以见楼上 ramdisk 。
    Yinz
        4
    Yinz  
       Jan 21, 2017
    呃,虽然不是很了解楼主的需求,但是为什么不用 try..except? 在 except 里把出错的地址写会数据库里?
    ryd994
        5
    ryd994  
       Jan 21, 2017 via Android
    不要加表,加一 bool 字段
    你现在这样插入行开销很大
    bool 原本有,只是改值开销小
    ryd994
        6
    ryd994  
       Jan 21, 2017 via Android
    另外,你这个需求本质上是个队列,用队列库实现就好办了
    omg21
        7
    omg21  
    OP
       Jan 21, 2017
    @loading 你说的 ramdisk 就是指的 sqlite 里的 sqlite3.connect(':memory:')这种模式吗?
    loading
        8
    loading  
       Jan 21, 2017 via Android
    @omg21 你这是内存模式,我说的 ramdisk 你不知道?
    看这里:
    http://www.baike.com/wiki/RAMDisk

    下次请自己查吧……

    你也不说你什么系统,不好提供方案。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1191 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 23:57 · PVG 07:57 · LAX 16:57 · JFK 19:57
    ♥ Do have faith in what you're doing.