Flask应用中SQLite数据库相对路径配置问题求助
解决Flask中SQLite相对路径跨机器连接问题
问题核心是你用的相对路径基于运行Flask时的工作目录,而非main.py所在的App文件夹,导致换机器或启动目录变化时路径失效。以下是可靠的跨机器解决方案:
方案1:使用pathlib(Python 3.4+推荐)
利用__file__获取当前main.py的绝对路径,再构建数据库文件的路径,完全脱离工作目录限制:
from pathlib import Path from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) # 获取main.py所在的App文件夹路径 app_root = Path(__file__).parent # 构建db文件夹和数据库文件的完整路径 db_path = app_root / "db" / "App.db" # 转换为SQLAlchemy需要的URI格式 app.config['SQLALCHEMY_DATABASE_URI'] = f"sqlite:///{db_path}" db = SQLAlchemy(app)
方案2:使用os.path(兼容旧版Python)
如果你的Python版本低于3.4,用os.path模块实现相同逻辑:
import os from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) # 获取main.py所在的App文件夹路径 app_root = os.path.dirname(os.path.abspath(__file__)) # 构建数据库文件路径 db_path = os.path.join(app_root, "db", "App.db") app.config['SQLALCHEMY_DATABASE_URI'] = f"sqlite:///{db_path}" db = SQLAlchemy(app)
额外注意事项
- 确保
App/db文件夹存在:怕部署时遗漏的话,可添加自动创建逻辑:# 针对pathlib写法 (app_root / "db").mkdir(exist_ok=True) # 针对os.path写法 os.makedirs(os.path.join(app_root, "db"), exist_ok=True) - 无需手动调整工作目录:上述方案完全基于项目文件结构生成路径,只要项目目录结构不变,在任意机器上运行都能正常连接数据库。
内容的提问来源于stack exchange,提问作者Tayla Corney
相关产品推荐
相关产品推荐

