您的位置:首页 > 数据库

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

2017-07-18 11:41 597 查看
最近在新建一个项目的时候遇到了这样的问题,使用工厂化函数构建项目,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-web
相关文章推荐