flask应用程序数据库数据在heroku中部署一段时间后自动删除

2024-06-17 08:23:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我在flask中创建了一个SQLite数据库,当我测试网站时,我提交了一些数据,它工作得很好,但当我在Heroku中部署应用程序并再次测试它时heroku app通过添加一些数据,它存储了一些数据并正常工作,所以我关闭了该选项卡。但当我在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()

网站:-Click Hear


Tags: 数据keyconfigfalsetrueappdbsqlite
1条回答
网友
1楼 · 发布于 2024-06-17 08:23:01

Heroku Dynos使用ephemeral filesystem。Sqlite不是在这种环境中使用的可靠数据库,因为它作为文件存储在本地文件系统中,并且会在应用程序的生命周期中定期销毁

在这种环境中,我建议使用托管数据库解决方案,如Heroku Postgres

编辑2021-10-18:我偶然发现了有关SQLite on Heroku的官方Heroku文档。至于将SQLAlchemy与Postgres联系起来,我找到了一个非常彻底的问题How do I use Heroku Postgres with my flask-sqlalchemy app?的答案

相关问题 更多 >