Flask 目录结构, 跟Django非常像...
app.__init__.py
from flask import Flask from flask_sqlalchemy import SQLAlchemy # 实例化SQLAlchemy db = SQLAlchemy() from app.views.book import book def create_app(): my_app = Flask(__name__) # 初始化app 配置 my_app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:@127.0.0.1:3306/day127sqlalchemy?charset=utf8' my_app.config['SQLALCHEMY_POOL_SIZE'] = 5 my_app.config['SQLALCHEMY_POOL_TIMEOUT'] = 15 my_app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False # 初始化SQLAlchemy ,本质上就是讲以上的配置读出来 db.init_app(my_app) # 蓝图 my_app.register_blueprint(book) return my_app
app.views.book.py
from flask import Blueprint from app import db from app.models import Book book = Blueprint('book', __name__) @book.route('/book_list') def book_list(): book_info_list = Book.query.all() print(book_info_list) return 'book_list' @book.route('/book_add') def book_add(): db.session.add(Book(name='freedom')) db.session.commit() return 'ok'
app.models.py
from app import db # type:db Base = db.Model class Book(Base): __tablename__ = 'book' __table_args__ = {"useexisting": True} id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(20)) def __repr__(self): return self.name # 离线脚本 if __name__ == '__main__': from app import create_app app = create_app() with app.app_context(): db.drop_all(app=app) db.create_all(app=app)
manager.py
import app from flask_script import Manager from flask_migrate import Migrate, MigrateCommand my_app = app.create_app() # 让 app 支持manager manager = Manager(my_app) # Migrate 既然是数据库迁移, 就要告诉 支持哪个app, 数据库db 在哪里 Migrate(my_app, app.db) manager.add_command('db', MigrateCommand) """ 在命令行输入 数据库迁移指令: python manager.py db init # 生成 migrations 文件夹 python manager.py db migrate # Django中的 makemigration python manager.py db upgrade # Django中的 migrate """ @manager.command def my_task(arg): # 自定制脚本命令 print(arg) @manager.option('-h', '--host', dest='host') @manager.option('-p', '--post', dest='post') def my_runserver(host, post): # 短指令, 长指令, 变量名dest # 在命令行输入 python manager.py my_runserver -h 0.0.0.0 -p 8000 # 等同于输入 python manager.py runserver -h 0.0.0.0 -p 8000 print(host, type(host)) # 0.0.0.0 <class 'str'> print(post, type(post)) # 8000 <class 'str'> my_app.run(host, int(post)) if __name__ == '__main__': manager.run() # 替换my_app.run(), 在命令行输入 python manager.py runserver