flask框架数据库迁移

前言

需要导入

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文件夹
1

Step2迁移

2

Step3更新(此时数据库中才创建表)

3

结果

4

运行

5

测试

6

猜你喜欢

转载自blog.csdn.net/weixin_40775077/article/details/84931476
今日推荐