SQLAlchemy中db.create_all()无法创建独立文件内的模型表
问题原因与解决办法
核心问题是SQLAlchemy没有加载到你在models.py里定义的模型,所以调用db.create_all()时不会创建对应的表。你只在models里导入了db,但app.py里根本没导入models模块,SQLAlchemy完全不知道这些模型的存在。
具体解决步骤
方法1:在app.py中导入models模块
修改你的app.py,在db = SQLAlchemy(app)之后添加models的导入(避免循环导入问题):
from flask import Flask from flask_sqlalchemy import SQLAlchemy import os basedir = os.path.abspath(os.path.dirname(__file__)) app = Flask(__name__) app.config['SECRET_KEY'] = 'I5aE2js75KeZHVx88qAm4gPHnDvM7lSD' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + os.path.join(basedir, 'data.db') db = SQLAlchemy(app) # 导入models模块,让SQLAlchemy识别到里面的模型 import models
这样当app启动时,models里的User类会被加载,SQLAlchemy就能识别到这个模型,调用db.create_all()时就会创建对应的user表。
方法2:在执行db.create_all()前手动导入模型
如果你是在Flask Shell里操作,需要先导入models里的模型,再执行创建命令:
from app import db from models import User db.create_all()
为什么模型放app.py里能正常工作?
因为模型直接定义在app.py里,当你运行app或者调用db.create_all()时,代码已经加载了这个模型类,SQLAlchemy能直接识别到它,所以可以创建对应的表。
内容的提问来源于stack exchange,提问作者m3hran
相关产品推荐
相关产品推荐

