You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask应用在Debian+Apache2环境下无法打开SQLite数据库文件

问题解决思路

核心原因

Apache运行WSGI应用时,当前工作目录并不是你的flask_app文件夹,而是Apache的默认工作目录(比如/var/www/或/etc/apache2/)。你用相对路径'database.db'时,程序会去Apache的工作目录找文件,自然找不到,进而抛出无法打开数据库的错误。

解决方案

1. 使用数据库文件的绝对路径

修改get_db_connection方法,通过Flask应用的根目录拼接绝对路径,确保每次都能定位到正确的数据库文件:

import os
from flask import current_app

def get_db_connection():
    # 拼接flask_app文件夹与数据库文件的绝对路径
    db_path = os.path.join(current_app.root_path, 'database.db')
    conn = sqlite3.connect(db_path)
    conn.row_factory = sqlite3.Row
    return conn

如果你的__init__.py里是用app = Flask(__name__)初始化的应用,current_app.root_path会自动指向flask_app文件夹的绝对路径,无需手动硬编码路径。

2. 补全权限排查

即使路径正确,Apache运行的用户(通常是www-data)需要拥有flask_app文件夹和数据库文件的读写权限:

  • 给文件夹设置所属用户与权限:
    sudo chown -R www-data:www-data /path/to/your/flask_app
    sudo chmod -R 755 /path/to/your/flask_app
    
  • 单独给数据库文件开放读写权限:
    sudo chmod 664 /path/to/your/flask_app/database.db
    

3. 修正WSGI配置

检查flaskapp.wsgi文件,确保它正确指向应用目录并设置工作路径:

import sys
import os

# 将flask_app的父目录加入Python路径
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))

# 将工作目录切换到flask_app文件夹
os.chdir(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'flask_app'))

from flask_app import app as application

验证步骤

  1. 重启Apache服务:sudo systemctl restart apache2
  2. 访问Flask应用,检查是否仍有数据库连接错误
  3. 若问题依旧,可以在get_db_connection里添加打印语句输出db_path,然后查看Apache错误日志(/var/log/apache2/error.log),确认路径是否正确:
    print(db_path)
    

内容的提问来源于stack exchange,提问作者Lacey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 06:10:00