gpt4 book ai didi

python - 如何使用正确的数据库引用设置 Flask-Migrate?

转载 作者:行者123 更新时间:2023-12-01 07:28:02 25 4
gpt4 key购买 nike

我正在构建一个 Flask 应用程序,并尝试使用 Flask-Migrate 设置数据库迁移。我已经让它正常工作了,但是有一个奇怪的问题,即应用程序/迁移没有在同一个位置查找 .db 文件,并且需要知道如何让它们在同一个位置查找。

我的应用程序运行完美,没有收到任何错误。 Flask-Migrate 工作完美,我没有收到错误。这是我的应用程序当前的简化布局:

app.py
app/
|- __init__.py
|- config.py

当我运行“flask run”时,它认为数据库在这里:

app.py
app/
|- __init__.py
|- config.py
|- app.db <--(In the app folder)

但是当我运行“flask db升级”时,它认为数据库在这里:

app.py
app.db <--(In the main folder)
app/
|- __init__.py
|- config.py

我将 SQLALCHEMY_DATABASE_URI 设置为“sqlite:///app.db”,如果我不断更改“sqlite:///app.db”和“sqlite:”之间的 SQLALCHEMY_DATABASE_URI,实际上可以让它们正常工作。///../app.db' 在运行两个命令之间。

app.py 文件

from app import create_app

app = create_app()

if __name__ == '__main__':
app.run(debug=True)

简化的__init__.py文件:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from app.config import Config
from flask_migrate import Migrate

db = SQLAlchemy()
migrate = Migrate()

def create_app(config_class=Config):
app = Flask(__name__)
app.config.from_object(Config)

db.init_app(app)
migrate.init_app(app, db)

from app.routes import main
app.register_blueprint(main)

return app

简化的config.py文件

import os

class Config:
SECRET_KEY = os.environ.get('SECRET_KEY')
SQLALCHEMY_DATABASE_URI = os.environ.get('SQLALCHEMY_DATABASE_URI')

我希望flask run和flask db升级能够在同一个地方看到.db文件,但他们没有。相反,他们分别在子文件夹或父文件夹中看到它们。

最佳答案

问题是您正在使用 SQLite 数据库的 URL,因此每当应用程序更改当前工作目录时,都会相对于新的当前目录再次计算数据库的位置。

解决办法很简单,使用绝对URL。这是在设置 SQLALCHEMY_DATABASE_URI 环境变量时完成的,该值应如下所示:

export SQLALCHEMY_DATABASE_URI="sqlite:////home/yourname/yourapp/app.db"

请注意,这是 sqlite: 后跟四个斜杠,而不是三个。前两个斜杠是 URL 方案和 URL 其余部分之间的分隔符。第三个斜杠将主机/端口与路径分隔开(主机和端口在 SQLite URL 上为空)。第四个斜杠是数据库文件绝对路径的开头。

关于python - 如何使用正确的数据库引用设置 Flask-Migrate?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57353481/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com