Flask创建数据库表后sqlite .tables无返回及instance目录疑问
问题解答
instance目录的生成原因
从Flask 2.0版本和Flask-SQLAlchemy 3.x版本开始,官方引入了**实例目录(instance directory)**的默认机制,目的是将应用代码与实例数据(比如数据库文件、配置文件等)分离,遵循代码与数据解耦的最佳实践。
当你配置SQLALCHEMY_DATABASE_URI = 'sqlite:///database.db'这种相对路径时,新版本的Flask-SQLAlchemy会自动在项目根目录下创建instance文件夹,并将SQLite数据库文件存储在该目录内,而不是你预期的app文件夹下。这是框架的默认行为,替代了旧版本直接在代码目录生成数据库的逻辑。
为什么你手动创建的数据库文件无效
你在app文件夹下手动创建的database.db并没有被Flask-SQLAlchemy使用——框架实际连接的是instance目录下自动生成的那个数据库文件,所以你执行db.create_all()后,表是创建在instance目录的数据库里,而你查看app目录下的数据库自然看不到任何表。
如何修改数据库存储位置(可选)
如果想让数据库回到app文件夹下,需要将数据库URI改为基于应用根目录的绝对路径:
import os from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) # 基于app根目录生成数据库路径 app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + os.path.join(app.root_path, 'database.db') db = SQLAlchemy(app)
内容的提问来源于stack exchange,提问作者user8981199
相关产品推荐
相关产品推荐

