如何控制SQLAlchemy中SQLite数据库文件的存储路径?
Flask应用部署:SQLite数据库路径控制问题
要将Flask应用部署到无SSH访问权限的虚拟主机,已确认主机可运行无数据库的Flask应用,但创建SQLite数据库时出错,无法控制数据库存储位置,部署失败。
当前代码
from flask_sqlalchemy import SQLAlchemy # create the extension db = SQLAlchemy() # create the app app = Flask(__name__) # configure the SQLite database, relative to the app instance folder app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///flaskapp.db" # initialize the app with the extension db.init_app(app)
本地开发的路径差异
本地开发时,在Geany中运行db.create_all(),数据库会被放在var/app-instance/目录下;在PyCharm中运行则放在instance/目录下。推测有变量决定该路径,但未找到修改方式,本地应用可正常运行,但部署到虚拟主机后失败。
已尝试的解决操作
- 查看SQLAlchemy源码,未明确路径结构的来源;
- 虚拟主机不允许使用
os模块,无法通过代码获取或修改路径; - 本地使用绝对路径
sqlite:////tmp/flaskapp.db可正常工作,但虚拟主机无/tmp目录访问权限,也无法找到可写入的绝对路径,且无法执行pwd命令查看当前路径; - 尝试使用相对路径
sqlite://instance/flaskapp.db,触发格式错误,提示的有效SQLite URL格式为:sqlite:///:memory:(或sqlite://)sqlite:///relative/path/to/file.dbsqlite:////absolute/path/to/file.db
- 改用相对路径
sqlite:///instance/flaskapp.db,即使手动创建instance目录仍报错:sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) unable to open database file,目录权限与项目一致。
核心疑问
希望能明确指定数据库相对于应用根目录的存储路径(使用Linux(Arch)系统)。使用url.make_url()测试时结果符合预期,但运行db.create_all()时,数据库被放在项目根目录的instance/中,而非main.py所在的项目根目录,请问忽略了什么?
内容的提问来源于stack exchange,提问作者krsmith28p
相关产品推荐
相关产品推荐

