【问题标题】:Create sqlite database using Flask-Migrate使用 Flask-Migrate 创建 sqlite 数据库
【发布时间】:2018-09-15 12:12:54
【问题描述】:

我正在开发一个 Flask 应用程序,使用 SQLAlchemy 连接 sqlite 数据库并使用 Flask-Migrate 来管理迁移。

我使用

生成了第一个迁移脚本
flask db init
flask db migrate

我将 repo 推送到另一台服务器,我正在尝试使用创建数据库

flask db upgrade

这是正确的程序吗?


我很确定第一次这样做时,sqlite 数据库已创建。

我正在尝试在另一台服务器上再次执行此操作,但我得到了

SqlDatabaseDoesNotExistError: Database "sqlite:////absolute/path/to/sqlite.db" does not exist

如果删除并尝试在第一台服务器上重新创建数据库,我也会遇到同样的错误。

目录存在且可写,但数据库文件不存在。

sqlalchemy不存在sqlite数据库不应该创建吗?

我应该如何创建数据库? Flask-Migrate 文档对此没有明确说明,因为这是一个特定于 sqlite 的问题(我猜其他数据库引擎不会自动创建数据库)。


我首先使用touch 创建空的数据库文件,设法让它工作。也许那是我前几天做的,我不记得了。

看起来像是权限问题,但我不明白。

权限是:

drwxrwx--- 2 root www-data 4096 Apr  5 18:50 sqlite

我正在跑步

flask db upgrade

无论如何都是 root,所以我不明白为什么它不起作用。

这就是我所做的:

touch sqlite/sqlite.db
chown www-data:www-data sqlite/sqlite.db
chmod 600 sqlite/sqlite.db
flask db upgrade

然后它就起作用了。

我仍然觉得我做的不对。

【问题讨论】:

  • 确保包含它的目录也是用户可写的!
  • 你在新服务器上设置了FLASK_APP环境变量吗?
  • @KlausD。该目录存在并且可写。只有数据库文件不存在。
  • @majin 是的。否则我会得到“无法找到 Flask 应用程序”。错误。
  • @Jerome 看看this discussion 关于在flask-Migrate 中创建数据库。我认为SQLAlchemy.create_all() 可以在您第一次部署应用程序时由自定义 CLI 命令调用

标签: python sqlite flask sqlalchemy flask-migrate


【解决方案1】:

TL;博士

是的,程序是正确的。对于 sqlite 数据库,这应该可以工作。


真丢脸。该错误来自我前段时间在应用程序代码中引入的检查,如果没有数据库,则在初始化时停止。我想知道我是怎么错过的。

由于flask db upgrade 启动应用程序,我们在创建BD 之前进行了此检查,这是我没有预料到的......

检查使用

sqlalchemy_utils.functions.database_exists(base_uri)

在 sqlite DB 的情况下,如果文件存在,即使它是空的,它也会返回 True,这说明需要 touch 文件。

我取消了支票。如果管理员没有启动 flask db upgrade 并且应用程序在没有 DB 的情况下启动,则在第一次请求 DB 之前不会有任何反馈。这并不理想,但这是一个无关紧要的小问题。

【讨论】:

    猜你喜欢
    • 2016-11-03
    • 2013-10-19
    • 1970-01-01
    • 2018-09-09
    • 1970-01-01
    • 2021-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多