flask_script下使用db.create_all()不能创建数据库

最近在新建一个项目的时候遇到了这样的问题,使用工厂化函数构建项目,flask_sqlalchemy创建不了数据库的表,查询了很久都无解,现在终于找到了问题。

项目结构树
CMDB/
├─app/
│ ├─auth/
│ ├─main/
│ ├─static/
│ ├─templates/
│ ├─__init__.py
│ ├─config.conf
│ ├─models.py
├─manager.py

__init__.py

from flask import Flask
from flask_sqlalchemy import SQLAlchemy


#初始化对象
db = SQLAlchemy()

#工厂化
def create_app():
    app = Flask(__name__)
    app.config.from_pyfile('config.conf')
    db.init_app(app)

    # 注册蓝图
    from .main import main as main_blueprint
    from .auth import auth as auth_blueprint
    app.register_blueprint(main_blueprint)
    app.register_blueprint(auth_blueprint)

    return app

models.py

from . import db
from flask_sqlalchemy import SQLAlchemy
from werkzeug.security import generate_password_hash,check_password_hash#转换密码用到的库
# from flask_security import RoleMixin, UserMixin#登录和角色需要继承的对象

class Test(db.Model):
    __tablename__ = 'test'
    id = db.Column(db.Integer(), primary_key=True)
    test = db.Column(db.String(80))

class Test2(db.Model):
    __tablename__ = 'test2'
    id = db.Column(db.Integer(), primary_key=True)
    test = db.Column(db.String(80))

manager.py

from flask_script import Manager,Shell
from app import create_app,db
from app.models import * #一定要引入模型类否则可能出现无法使用db.create_all()
from flask_migrate import Migrate,MigrateCommand #flask 迁移数据


app = create_app()
migrate = Migrate(app,db)
manager = Manager(app)

# Migration commands
manager.add_command('db', MigrateCommand)

# # Add interactive project shell
# def make_shell_context():
#     return dict(app=create_app, db=db)
# manager.add_command("shell", Shell(make_context=make_shell_context))

#创建数据库脚本
@manager.command
def create_db():
    db.create_all()

if __name__ == '__main__':
    # app.run()
    manager.run()

使用flask_script可以这样创建数据库的表,但是你没有在manager.py引入模型,就可能出现下面命令没有任何反应不报错的情况,所以需要引入所有的模型就行了,我也不太懂为什么,以后了解清楚了我再回头详细写下来。

python manager.py shell
from app import db 
db.create_all()

你可能感兴趣的:(flask_script下使用db.create_all()不能创建数据库)