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
models.py
manager.py
使用flask_script可以这样创建数据库的表,但是你没有在manager.py引入模型,就可能出现下面命令没有任何反应不报错的情况,所以需要引入所有的模型就行了,我也不太懂为什么,以后了解清楚了我再回头详细写下来。
项目结构树
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 db.create_all()无法创建表
- sqlite Manager的使用和在mac ox上创建DB数据库快捷方式
- 使用MySql的workbench创建diagram生成的sql script在本地创建数据库
- 使用Navicat V8.0创建数据库,外键出现错误ERROR 1005: Can't create table (errno: 121)
- 支持“WeShopDb”上下文的模型已在数据库创建后发生更改。请考虑使用 Code First 迁移更新数据库
- 解决zf create db-table 创建数据库报错的问题
- 支持“XXXDbContext”上下文的模型已在数据库创建后发生更改。请考虑使用 Code First 迁移更新数据库(http://go.microsoft.com/fwlink/?LinkId=2
- visual studio 项目中使用EF创建的数据库,后续更新数据库操作(生产已经部署,不能删除数据库重新创建)
- 使用Navicat V8.0创建数据库,外键出现错误ERROR 1005: Can't create table (errno: 121)
- flask-sqlalchemy使用命令创建数据库
- 由于db_create_online_log_dest_1参数造成数据库不能启动
- db.create_all()使用错误
- SQL Server 在多个数据库中创建同一个存储过程(Create Same Stored Procedure in All Databases)
- 解决:Android使用自带sqlite开发时,apk中创建的数据库外部的进程是没有权限去读/写的,而且无法如何读取指定目录下的db文件
- 使用 create 命令建立数据库v, 并利用sp_helpdb查看数据库文件
- 使用Navicat连接数据库,不能创建外键
- SQL Server 在多个数据库中创建同一个存储过程(Create Same Stored Procedure in All Databases)
- SQL Server 在多个数据库中创建同一个存储过程(Create Same Stored Procedure in All Databases)
- Qt使用SQLite不能创建db文件问题
- 使用 WebSphere Studio Application Developer 创建数据库应用程序