【问题标题】:Can't save on disk a database with sqlite3 - Python [duplicate]无法使用 sqlite3 在磁盘上保存数据库 - Python [重复]
【发布时间】:2020-12-02 10:56:40
【问题描述】:

我将 sqlite3 (import sqlite3) 与 python 一起使用,但我无法将 db 文件保存在磁盘上(在我的情况下,在 heroku 上,在 /app/ 内)。运行时没有错误:

c = sqlite3.connect(':memory:')
    c.execute('CREATE TABLE users (userid int, isbot boolean);')
    c.execute("INSERT INTO users VALUES (000000000, 'test');")
    c.commit()

    c2 = sqlite3.connect('/app/bot.db')
    with c2:
      for line in c.iterdump():
        if line not in ('BEGIN;', 'COMMIT;'): # let python handle the transactions
          c2.execute(line)
    c2.commit()

【问题讨论】:

标签: python database sqlite heroku disk


【解决方案1】:

我不相信 heroku 支持这种类型的文件

在他们的网站上找到这个。

磁盘支持的存储 SQLite 在内存中运行,并将其数据存储备份到磁盘上的文件中。虽然这种策略非常适合开发,但 Heroku 的 Cedar 堆栈有一个临时文件系统。您可以对其进行写入,也可以从中读取,但内容会定期清除。如果您要在 Heroku 上使用 SQLite,您将至少每 24 小时丢失一次整个数据库。

即使 Heroku 的磁盘可以持久运行 SQLite,仍然不适合。由于 SQLite 不作为服务运行,每个 dyno 将运行一个单独的运行副本。这些副本中的每一个都需要自己的磁盘支持存储。这意味着为您的应用程序提供动力的每个测功机都会有一组不同的数据,因为磁盘未同步。

您可以将应用配置为在 Postgres 上运行,而不是在 Heroku 上使用 SQLite。

【讨论】:

  • 谢谢,我会选择 Postgres!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-01
  • 2014-06-08
  • 1970-01-01
  • 2011-07-13
  • 2010-11-29
相关资源
最近更新 更多