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 = namedef __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 = namedef __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 = namedef __repr__(self):
return "<Student:%r>" % 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

转载于:https://www.cnblogs.com/leijing0607/p/7272843.html

python第三篇:python、flask关系映射相关推荐

  1. 十、给小白看的第三篇Python基础教程

    本文是第三篇,一共四篇打下Python基础 @Author:Runsen @公众号:Python之王 上面两个基本搞定了Python中数据结构,下面花一篇讲讲最重要的类. 7.面向对象编程 万物皆是对 ...

  2. Python 学习笔记 第三篇 Python实现网易云评论网页爬虫+词云展示 (Pycharm+Mysql)

    初始条件,具体可见我的其他文章. 1.安装Python.Python 学习笔记 第一篇 Python的安装与配置 2.安装Pycharm,并导入第三方包.Python 学习笔记 第二篇 Python ...

  3. python自学视频-师傅带徒弟学Python:第一篇Python基础视频课程

    ,赠送一本"Python相关图书". 咨询方式:加[51CTO-关老师付费群]523714201 验证消息:咨询赠书 本视频采用Python 3.x版 本篇包括8章内容,系统介绍了 ...

  4. native.loadlibrary获取路径不对_【Python专题(三)】Python模块导入与路径管理

    ​前言 Python项目的路径管理是一个让人头疼的问题.在写python项目的时候,明明 import了文件A,代码运行时却收到 ModuleNotFoundError,仔细一看,是引用路径不对,很是 ...

  5. Python进阶(三十三)Python获取并输出当前日期时间

    取得时间相关信息的话,要用到python time模块,python time模块里面有很多非常好用的功能,可以去官方文档了解下.时间戳是1970年到现在时间相隔的时间. 可以试下下面的方式来取得当前 ...

  6. Python教程三:使用Flask搭建web服务

    教程二:使用Aestate操作数据库 Python教程二:使用Aestate操作数据库_Cx_轩的博客-CSDN博客​​​​​​ ----------------------------------- ...

  7. Python新手引导 第三篇-Python基础和字符编码

    阅读本文需要4.66分钟 <!--more--> 有其他计算机语言基础的同学,阅读本篇基础部分建议1到2分钟. 基础类型.变量和字符编码 list 和 tuple 第一.基础类型.变量和字 ...

  8. 第三篇.python编辑器和集成环境01

    修改python的镜像源 使用pip可以提高网速 \Lib\site-packages\pip\models\index.py文件,将PYPI的值改为你所需要的镜像源即可,例如改为豆瓣镜像源: #Py ...

  9. 【Python第三篇】Python装饰器、生成器、迭代器

    本节内容 装饰器 字符串格式化 生成器和迭代器 1. 装饰器 装饰器实现的功能: @ + 函数名1.自动执行outer函数并且将其下面的函数名f1当作参数传递2.将outer函数的返回值,重新赋值给f ...

  10. Python番外篇:Flask+segno 实现个人名片二维码在线生成器

    hello,我是wangzirui32,今天来教大家如何Flask框架和segno模块实现个人名片二维码在线生成器. 开始学习吧! 1. 项目架构 image文件夹为空,templates下存储了2个 ...

最新文章

  1. netty加载html文件的原理,Netty+html聊天室入门
  2. Spring Boot持久化的简单实现
  3. Codeforces Beta Round #17 D. Notepad (数论 + 广义欧拉定理降幂)
  4. 有关Vector里面元素重复解决办法
  5. rabbitmq 不同的消费者消费同一个队列_消息队列王者--rabbitMQ深入理解--工作过程、消费模式、持久化等...
  6. 明天14点直播间见!5位业内大咖带您解锁数据库内核技术与行业应用
  7. mate10支持html,华为Mate 10再曝光:配置强劲,全面屏十分惊艳
  8. mysql查询删除重复数据
  9. 物联网核心安全系列——智能家居与数据安全问题
  10. U盘autorun病毒清理
  11. LaTeX (1)——LaTex环境的下载与安装(Tex live 2020+ Tex studio编辑器、 proTeXt(MiKTeX+TeXstudio编辑器))
  12. 【转】C#获取用户桌面等特殊系统路径
  13. word批量替换向下箭头为回车符号、批量删除空行、批量空格与空行
  14. 生日在java中怎么写_怎样用java做个生日提醒?如果同一天有多个人过生日怎么做?...
  15. 移动硬盘提示数据错误循环冗余检查要怎么办啊
  16. 网络共享里的计算机无法打开,局域网共享文件夹打不开怎么办
  17. Android 蓝牙 ble 随机地址深层次分析
  18. 面试笔记@MySQL
  19. 【数据库】03——初级开发需要掌握哪些SQL语句
  20. js实现 throttle 和 debounce

热门文章

  1. 苹果Mac从睡眠模式唤醒后 Wi-Fi 无法连接如何解决?
  2. 如何制作macOS Monterey启动U盘
  3. Mac怎么合并文件夹
  4. [JAVA]预面试笔记
  5. restframe_work1
  6. ubuntu,装完PYTHON3 pip3 install 报错
  7. Javascript常用语法 (一)
  8. Expressbody-parser
  9. Android TextView 实现文字大小不同和文字颜色不同
  10. mybatis-plus 官方发布神器,一个依赖轻松搞定数据权限,再也不用自己实现了!...