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

来源:互联网 发布:淘宝用什么进销存软件 编辑:程序博客网 时间:2024/06/05 18:29

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

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

__init__.py

from flask import Flaskfrom 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 dbfrom flask_sqlalchemy import SQLAlchemyfrom 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,Shellfrom app import create_app,dbfrom app.models import * #一定要引入模型类否则可能出现无法使用db.create_all()from flask_migrate import Migrate,MigrateCommand #flask 迁移数据app = create_app()migrate = Migrate(app,db)manager = Manager(app)# Migration commandsmanager.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.commanddef create_db():    db.create_all()if __name__ == '__main__':    # app.run()    manager.run()

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

python manager.py shellfrom app import db db.create_all()
阅读全文
2 0
原创粉丝点击