【发布时间】: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