问题描述
我正在将sqlite3( import sqlite3 )与python一起使用,但是我无法将db文件保存在磁盘上(在我的情况下是在
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在内存中运行,并在磁盘上的文件中备份其数据存储。尽管此策略可以很好地进行开发,但Heroku的Cedar堆栈具有临时文件系统。您可以写入它,也可以读取它,但是内容将定期清除。如果要在Heroku上使用SQLite,则将每24小时至少丢失一次整个数据库。
即使Heroku的磁盘持久运行SQLite也不适合。由于SQLite不能作为服务运行,因此每个dyno都将运行单独的运行副本。这些副本中的每一个都需要它们自己的磁盘支持的存储。这意味着由于磁盘未同步,为您的应用程序提供动力的每个dyno都将具有不同的数据集。
您可以将应用配置为在Postgres上运行,而不是在Heroku上使用SQLite。