7.数据库迁移、多对多关系使用

本文介绍了如何在Python的Flask框架中建立多对多关系,以学生选课为例展示了模型定义及数据操作。同时,讨论了数据库迁移的概念,包括其目的、操作流程,并提供了使用flask-migrate进行数据库迁移的命令。文章还提醒在降级时要谨慎操作,以防数据丢失。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

多对多关系

hello.py

'''
多对多模型
学生选课:学生和课程

'''
from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)


app.config['SQLALCHEMY_DATABASE_URI'] = "mysql+pymysql://root:root@127.0.0.1:3306/student"
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

db = SQLAlchemy(app)

#创建选课模型
#创建学生
class Student(db.Model):
    __tablename__ = "students"
    id = db.Column(db.Integer,primary_key=True,autoincrement=True)
    name = db.Column(db.String(32))

    #数据关系,反向关系,多对多二次查询
    courses = db.relationship("Course",backref="students",secondary="tb_student_course") 




#创建课程
class Course(db.Model):
    __tablename__ = "courses"
    id = db.Column(db.Integer,primary_key=True,autoincrement=True)
    name = db.Column(db.String(32))


#中间表
tb_student_course = db.Table(
"tb_student_course",
db.Column("student_id",db.Integer,db.ForeignKey(Student.id)),
db.Column("course_id",db.Integer,db.ForeignKey(Course.id))
    )



@app.route('/')
def index():
    return "<h1>Hello,World!</h1>"



if __name__ == "__main__":
    db.drop_all()
    db.create_all()

    #添加测试数据
    stu1 = Student(name="张三")
    stu2 = Student(name="李四")
    stu3 = Student(name="王五")

    cou1 = Course(name="物理")
    cou2 = Course(name="化学")
    cou3 = Course(name="生物3")

    stu1.courses = [cou2,cou3]
    stu2.courses = [cou2]
    stu3.courses = [cou1,cou2,cou3]

    db.session.add_all([stu1,stu2,stu3])
    db.session.add_all([cou1,cou2,cou3])

    db.session.commit()


    app.run(debug=True)

在这里插入图片描述

数据库迁移

前面几节数据删除增加重启脚本都恢复原状,真实情况下数据是实时更新的,因而产生了数据库迁移
数据库迁移:
1.是为了备份表的结构,并不备份数据
2.需要备份数据请使用navicate 来实现
3.更新过程的数据一般不丢失,但是降级的时候数据会丢失,表结构不会,降级请谨慎操

安装扩展

pip install flask_migrate

导入对象

from flask_migrate import Migrate

迁移命令

export FLASK_APP=xx.py
flask db init #初始化,只运行一次,生成migrations文件夹
flask db migrate -m "注释" #每次数据库更新的版本,方便回滚
flask db upgrade [version] #提交到数据库,更新数据库版本
flask db downgrade [version]  #提交到数据库,回滚到老版本
flask db show #查看最新版数据库
flask db current #查看当前版本数据库
flask db history #查看历史版本数据库

在这里插入图片描述
初始化操作
在这里插入图片描述
更新数据库操作
在这里插入图片描述
回滚操作
在这里插入图片描述

重点
数据库迁移:
1.是为了备份表的结构,并不备份数据
2.需要备份数据请使用navicate 来实现
3.更新过程的数据一般不丢失,但是降级的时候数据会丢失,表结构不会,降级请谨慎操作
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值