Flask 模型 多对多


from flask_sqlalchemy import SQLAlchemy
from datetime import datetime


db = SQLAlchemy()


class Grade(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    g_name = db.Column(db.String(10), nullable=True)
    # 定义模型Grade和Student模型的关联关系
    # relationship可以定义在任何一方 {哪一张表} {范查询}
    stus = db.relationship('Student', backref='g')

    __tablename__ = 'grade'


c_s = db.Table('c_s',
               db.Column('c_id', db.Integer, db.ForeignKey('course.id')),
               db.Column('s_id', db.Integer, db.ForeignKey('stu.id')))


class Course(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    c_name = db.Column(db.String(10), nullable=False)
    # 指定Course和Student的多对多关联关系
    stus = db.relationship('Student', secondary=c_s, backref='cou')
    #relationship可以定义在关联模型的任何一方

    __tablename__ = 'course'


class Student(db.Model):
    # 自增主键 id 字段
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)

    s_name = db.Column(db.String(10), unique=True, nullable=False)

    s_age = db.Column(db.Integer, default=18)
    # auto_now_add
    # auto_now 只在save()方法调用的时候auto_now字段才做更新。
    # update() 方法调用时auto_now字段不跟新
    create_time = db.Column(db.DateTime, default=datetime.now)
    """
        # 定义外键      
        sql: alter table stu add grade_id int;
        sql: alter table stu add foreign key(grade_id) references grade(id)    """

    grade_id = db.Column(db.Integer, db.ForeignKey('grade.id'), nullable=True)

    """
        # 如果没定义 tablename, 那么名字为模型名称小写
        # 定义 tablename 表示模型迁移导数据库中对应的表名称     """
    __tablename__ = 'stu'

    def save(self):
        # 事务session的add方法,其实是准备插入语句,insert
        db.session.add(self)
        # 事务session提交了,数据才会插入到数据库中
        db.session.commit()

    #可视化结果,可以有也可以没有
    # def __repr__(self):
    #     return '<Stuent(%s)>' % self.id

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容