无法使用 sqlite3 在磁盘上保存数据库 - Python [重复]

Posted

技术标签:

【中文标题】无法使用 sqlite3 在磁盘上保存数据库 - Python [重复]【英文标题】:Can't save on disk a database with sqlite3 - Python [duplicate] 【发布时间】: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()

【问题讨论】:

SQLite 与 Heroku 不兼容。这是有据可查的,in official documentation 和 in questions here。您必须迁移到真正的客户端-服务器数据库。 【参考方案1】:

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

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

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

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

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

【讨论】:

谢谢,我会选择 Postgres!

以上是关于无法使用 sqlite3 在磁盘上保存数据库 - Python [重复]的主要内容,如果未能解决你的问题,请参考以下文章

sqlite3数据库操作

让 Python 更加充分的使用 Sqlite3

如何在 Android 上使用 MediaStore 将数据从相机保存到磁盘?

核心数据 - 在后台保存到磁盘上的持久存储

无法在 plist 和 sqlite3 之间确定

如何保存我在 tkinter canvas IN sqlite3 数据库中制作的绘图,然后再次在画布上获取它