我在flask中创建了一个SQLite数据库,当我测试网站时,我提交了一些数据,它工作得很好,但是当我在Heroku中部署应用程序并通过添加一些数据再次测试Heroku应用程序时,它存储了它并正常工作,所以我关闭了该选项卡。但当我在1小时后重新访问网站时,我在Heroku部署应用程序后添加的数据不在那里。这种情况经常发生
我的数据库代码
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///categories.db'
app.config['SQLALCHEMY_BINDS'] = {
'anime': 'sqlite:///anime.db',
'movie': 'sqlite:///movies.db'
}
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
Bootstrap(app)
db = SQLAlchemy(app)
# CREATE TABLE
class Categories(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(100), unique=True, nullable=False)
description = db.Column(db.String(250), nullable=False)
review = db.Column(db.String(250), nullable=True)
img_url = db.Column(db.String(250), nullable=False)
db.create_all()
class Anime(db.Model):
__bind_key__ = 'anime'
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(250), unique=True, nullable=False)
year = db.Column(db.Integer, nullable=False)
description = db.Column(db.String(500), nullable=False)
rating = db.Column(db.Float, nullable=True)
ranking = db.Column(db.Integer, nullable=True)
review = db.Column(db.String(250), nullable=True)
img_url = db.Column(db.String(250), nullable=False)
db.create_all()
class Movie(db.Model):
__bind_key__ = "movie"
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(250), unique=True, nullable=False)
year = db.Column(db.Integer, nullable=False)
description = db.Column(db.String(500), nullable=False)
rating = db.Column(db.Float, nullable=True)
ranking = db.Column(db.Integer, nullable=True)
review = db.Column(db.String(250), nullable=True)
img_url = db.Column(db.String(250), nullable=False)
db.create_all()
网站:-点击收听
Heroku Dynos使用临时文件系统。在这种环境中,Sqlite不是一个可靠的数据库,因为它作为文件存储在本地文件系统上,并且在应用程序的生命周期中会定期销毁。
在这种环境下,我建议使用托管数据库解决方案,如Heroku Postgres。
编辑2021-10-18我偶然发现了Heroku上关于SQLite的官方文档。至于连接SQLAlchemy到Postgres,我找到了一个非常彻底的StackOverflow答案的问题,我如何使用Heroku Postgres与我的flask-sqlalchemy应用程序?