• python第三篇:python、flask关系映射


    python中关系映射主要包括三种:一对多关系映射、一对一关系映射、多对多关系映射。

    一对多关系映射
    一方:Student(学生)
    添加关联属性和反向引用
    多方:Article(文章)
    添加外键关联
    
    一对一关系映射
    一方:Student(学生)主表
    添加多对多的关联属性和反向引用,同时uselist取值为FALSE,表示fetchone
    添加第三张表的关联属性和反向引用关系
    一方:Detail(详情表)次表
    添加外键关联
    
    多对多关系映射
    多方:Users
    添加多对多的关联属性和反向引用,同时指明第三张关联表(2)
    添加对第三张表的关联属性和反向引用(2)
    多方:Goods
    添加对第三张表的关联属性和反向引用(2)
    第三张关联表:UsersGoods

    一对多关系映射

    # 一方
    class Student(db.Model):
    __tablename__ = "student"
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(30), nullable=False)
    # 增加关联属性和反向引用关系
    # 关联属性:在student对象中通过哪个属性能够得到对应的所有的article对象
    # 反向引用:在article对象中通过哪个属性能够得到它对应的student
    articles = db.relationship('Article', backref="student", lazy="dynamic")
    
    def __init__(self, name):
    self.name = name
    
    def __repr__(self):
    return "<Student:%r>" % self.name
    
    # 多方
    class Article(db.Model):
    __tablename__ = "article"
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(30), nullable=False)
    # 增加一个列(外键):引用自article表的主键,这一段代码是为了生成数据库关联。
    student_id = db.Column(db.Integer, db.ForeignKey('student.id')) # 这里的student是数据库表名
    
    def __init__(self, name):
    self.name = name
    
    def __repr__(self):
    return "<Article:%r>" % self.tname

    一对一关系映射

    # 一方
    class Student(db.Model):
    __tablename__ = "student"
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(30), nullable=False)
    # 增加关联属性和反向引用关系
    # 关联属性:在student对象中通过哪个属性能够得到detail信息
    # 反向引用:在detail对象中通过哪个属性能够得到它对应的student
    # uselist is for the purpose of fetchone
    user = db.relationship('Detail', backref='student', uselist=False)
    
    def __init__(self, name):
    self.name = name
    
    def __repr__(self):
    return "<Student:%r>" % self.name
    
    class Detail(db.Model):
    __tablename__ = 'detial'
    id = db.Column(db.Integer, primary_key=True)
    weight = db.Column(db.Float)
    student_id = db.Column(db.Integer, db.ForeignKey('student.id'))

    多对多关系映射

    class Users(db.Model):
    __tablename__ = 'users'
    id = db.Column(db.Integer,primary_key=True)
    username = db.Column(db.String(80),nullable=False,unique=True)
    age = db.Column(db.Integer)
    email = db.Column(db.String(120),unique=True)
    isActive = db.Column(db.Boolean,default=True)
    
    # 添加多(Users)对多(Goods)的关联属性和反向引用关系
    # 涉及到第三张关联表 - users_goods
    goods=db.relationship(
    'Goods',
    secondary='users_goods',
    lazy="dynamic",
    backref=db.backref(
    "users",
    lazy='dynamic')
    )
    
    #增加对UsersGoods的关联属性和反向引用关系:目的是为了创建Users类 与 UsersGoods类 之间的关系
    userGoods = db.relationship('UsersGoods',backref="user",lazy="dynamic")
    
    
    class Goods(db.Model):
    __tablename__ = "goods"
    id = db.Column(db.Integer,primary_key=True)
    gname = db.Column(db.String(80))
    gprice = db.Column(db.Float)
    
    #增加对UsersGoods类的关联属性和反向引用关系
    goodUsers = db.relationship('UsersGoods',backref="good",lazy="dynamic")
    
    # 创建 users_goods 的第三张关联表,从而来表示多对多的关系
    class UsersGoods(db.Model):
    __tablename__ = "users_goods"
    id = db.Column(db.Integer,primary_key=True)
    users_id = db.Column(db.Integer,db.ForeignKey('users.id'))
    goods_id = db.Column(db.Integer,db.ForeignKey('goods.id'))
    count = db.Column(db.Integer,default=1)
    
    # user.goods
    # user.userGoods
    # good.users
    # good.goodUsers
    # goodUsers.good
    # userGoods.user

  • 相关阅读:
    xcode 常用插件 加快开发速度 --严焕培
    iOS,蓝牙开发!!--By帮雷
    获取加速度数据,陀螺仪数据,磁场数据的两种方式-陈鹏
    简单仿京东"筛选"界面 双导航栏控制器共存 by Nicky.Tsui
    扩展NSDate类实现快捷使用 —— 昉
    如何实现视图圆角效果的三种方法及比较——董鑫
    无意进去UIView随笔闹腾着玩 -by 胡 xu
    简单实现UITableView索引功能(中英文首字母索引)(一) ByH罗
    动画推荐-By胡罗
    [手游项目3]-20-golang向上取整、向下取整和四舍五入
  • 原文地址:https://www.cnblogs.com/leijing0607/p/7272843.html
Copyright © 2020-2023  润新知