前言
需要导入
from flask import Flask
from flask_script import Manager
from flask_migrate import Migrate, MigrateCommand
示例
# -*- coding:utf-8 -*-
from flask import Flask, render_template, url_for, request, redirect
from flask_sqlalchemy import SQLAlchemy
from flask_wtf import Form
from wtforms import StringField, SubmitField
from wtforms.validators import DataRequired
from flask_script import Manager
from flask_migrate import Migrate, MigrateCommand
app = Flask(__name__)
# 配置参数
class Config(object):
"""配置参数"""
# sqlalchemy的配置参数
SQLALCHEMY_DATABASE_URI = "mysql://root:[email protected]:3306/db_ab"
# 设置sqlalchemy自动跟踪数据库
SQLALCHEMY_TRACE_MODIFICATIONS = True
# 设置秘钥
SECRET_KEY = "ABCDEFG1234567"
app.config.from_object(Config)
db = SQLAlchemy(app)
manager = Manager(app) # 创建flask脚本管理对象
Migrate(app, db) # 创建数据库迁移工具对象
manager.add_command("db", MigrateCommand) # 向manager中添加数据库迁移工具
# 数据库迁移操作
# 1、初始化
# python authorbook.py db init
# 2、迁移(带注释)
# python authorbook.py db migrate -m "add email"
# 3、迁移后更新
# python authorbook.py db upgrade
# 查看迁移历史
# python authorbook.py db history
# 降级到迁移(状态码为455b9cced7b)
# python authorbook.py db downgrade 455b9cced7b
# 数据库模型
class Author(db.Model):
"""作者"""
__tablename__ = "tbl_authors"
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(32))
books = db.relationship("Book", backref="author")
# email = db.Column(db.String(32))
class Book(db.Model):
"""书籍"""
__tablename__ = "tbl_books"
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(64))
author_id = db.Column(db.Integer, db.ForeignKey("tbl_authors.id"))
# 表单模型
class AuthorBookForm(Form):
"""表单模型"""
author_name = StringField(label=u"作者", validators=[DataRequired(u"作者不能为空!")])
book_name = StringField(label=u"书籍", validators=[DataRequired(u"书籍不能为空!")])
submit = SubmitField(label=u"保存")
@app.route("/", methods=["GET", "POST"])
def index():
# 提交表单数据
form = AuthorBookForm()
if form.validate_on_submit():
# 表单数据通过验证
# 获取表单数据
author_name = form.author_name.data
book_name = form.book_name.data
# 保存到数据库
author = Author(name=author_name)
db.session.add(author)
db.session.commit()
book = Book(name=book_name, author_id=author.id)
db.session.add(book)
db.session.commit()
# 查询作者
author_li = Author.query.all()
return render_template("author_book.html", authors=author_li, form=form)
@app.route("/delete_book", methods=["GET"])
def delete_book():
# 获取参数
book_id = request.args.get("book_id")
# 删除数据
book = Book.query.get(book_id)
db.session.delete(book)
db.session.commit()
return redirect(url_for("index"))
if __name__ == "__main__":
manager.run()
Step1初始化
初始化后将在工作目录下生成一个migrates文件夹