无法使用 sqlite3 在磁盘上保存数据库 - Python
Can't save on disk a database with sqlite3 - Python
我正在使用带有 python 的 sqlite3 (import sqlite3),但我无法将 db 文件保存在磁盘上(在我的例子中heroku,在 /app/ 内)。当我 运行 this:
时没有错误
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()
我不相信 heroku 支持这种类型的文件
在他们的网站上找到这个。
磁盘支持存储
SQLite 运行s 在内存中,并在磁盘文件中备份其数据存储。虽然这种策略适用于开发,但 Heroku 的 Cedar 堆栈有一个临时文件系统。您可以写入,也可以从中读取,但内容会定期清除。如果你在 Heroku 上使用 SQLite,你将至少每 24 小时丢失一次整个数据库。
即使 Heroku 的磁盘是持久的 运行ning SQLite 仍然不适合。由于 SQLite 没有 运行 作为一项服务,每个测功机都会 运行 一个单独的 运行ning 副本。这些副本中的每一个都需要自己的磁盘备份存储。这意味着每个为您的应用提供动力的测力计都会有一组不同的数据,因为磁盘不同步。
您可以将您的应用配置为 运行 在 Postgres 上,而不是在 Heroku 上使用 SQLite。
我正在使用带有 python 的 sqlite3 (import sqlite3),但我无法将 db 文件保存在磁盘上(在我的例子中heroku,在 /app/ 内)。当我 运行 this:
时没有错误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()
我不相信 heroku 支持这种类型的文件
在他们的网站上找到这个。
磁盘支持存储 SQLite 运行s 在内存中,并在磁盘文件中备份其数据存储。虽然这种策略适用于开发,但 Heroku 的 Cedar 堆栈有一个临时文件系统。您可以写入,也可以从中读取,但内容会定期清除。如果你在 Heroku 上使用 SQLite,你将至少每 24 小时丢失一次整个数据库。
即使 Heroku 的磁盘是持久的 运行ning SQLite 仍然不适合。由于 SQLite 没有 运行 作为一项服务,每个测功机都会 运行 一个单独的 运行ning 副本。这些副本中的每一个都需要自己的磁盘备份存储。这意味着每个为您的应用提供动力的测力计都会有一组不同的数据,因为磁盘不同步。
您可以将您的应用配置为 运行 在 Postgres 上,而不是在 Heroku 上使用 SQLite。