博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python 关系映射
阅读量:6938 次
发布时间:2019-06-27

本文共 3358 字,大约阅读时间需要 11 分钟。

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 "
" % 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 "
" % 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 "
" % self.nameclass 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复制代码

转载地址:http://twsnl.baihongyu.com/

你可能感兴趣的文章
文本内容超出父元素一行或多行省略号代替
查看>>
冒泡排序法
查看>>
第五次作业
查看>>
创建外部用户_外部表
查看>>
安徒生的童话《冰雪皇后》原本是这样的
查看>>
[Django学习] Django基础(7)_分类统计
查看>>
第四次作业测试代码+018+李滨
查看>>
五花肉
查看>>
利用jquery将页面中所有目标为“#‘的链接改为其他URL
查看>>
缓冲流
查看>>
PMBOK学习笔记一
查看>>
Python 3.5 socket OSError: [Errno 101] Network is unreachable
查看>>
前后端分离?
查看>>
os中的mmu介绍
查看>>
Python使用Scrapy爬虫框架全站爬取图片并保存本地(@妹子图@)
查看>>
Java异常处理机制以及try-catch-finally-return执行顺序
查看>>
Java Path 问题(一)
查看>>
51nod 1293:球与切换器
查看>>
Django之URL(路由系统)用法
查看>>
javascript DES算法(二)
查看>>