15-模型 - 一对多 多对多

news2024/11/24 14:45:12

一对多:

        1.  在多的表里定义外键 db.ForeignKey('主键')

        2. 增加字段 db.relationship 建立联系 ("关联表类名","反向引用名")

from ext import db

#  一
class User(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    username = db.Column(db.String(15), nullable=False)
    password = db.Column(db.String(64), nullable=False)

    # 代码层次: 最后创建,这句不需要迁移;只要建立外键,就需要加relationship
    # 写在 一表 或者 多表 里都可以,只要是以下格式即可
    # db.relationship("关联表" , "反向引用:外键引用主键时的名称")
    articles = db.relationship("Article", backref='user')


# 多
class Article(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    title = db.Column(db.String(50), nullable=False)

    #
    # db.ForeignKey('user.id') : 定义外键;关联主键的id,类名在数据库中显示为小写user--> user.id
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)

"""
python app.py db init       # 产生一个文件夹 migrations,只需执行一次
python app.py db migrate    # 迁移: 自动生成一个版本文件,在migrations/version生成一个.py文件
python app.py db upgrade    # 同步: 生成数据库表
"""

多对多:

        1. 定义模型 和 中间表

        2. app.py 引入 模型

        3. 执行指令 生成模型

from ext import db


# 用户表
class User(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    username = db.Column(db.String(15), nullable=False)
    password = db.Column(db.String(64), nullable=False)
    isdelete = db.Column(db.Boolean,default=False)


# 商品表
class Goods(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    gname = db.Column(db.String(100), nullable=False)
    price = db.Column(db.Float, nullable=False)

    # relationship:需要定义外键才能使用,本表中没定义,
    # 可以指定关联的表:secondary='user_goods'
    # 这句不需要迁移
    user = db.relationship('User', backref='goodslist', secondary='user_goods')


# 中间表
# 第一种(不推荐)
# tags = db.Table('user_goods',
#                 db.Column('user_id', db.Integer, db.ForeignKey("user.id")),
#                 db.Column('goods_id', db.Integer, db.ForeignKey("goods.id")),
#                 db.Column("number",db.Inteter,default=1)
#                 )


# 第二种(推荐)
# 关系表: user与 goods之间的关系
class User_goods(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    # 关联 用户 主键
    user_id = db.Column(db.Integer, db.ForeignKey("user.id"))
    # 关联 商品 主键
    goods_id = db.Column(db.Integer, db.ForeignKey("goods.id"))
    number = db.Column(db.Integer, default=1)

"""
python app.py db init       # 产生一个文件夹 migrations,只需执行一次
python app.py db migrate    # 迁移: 自动生成一个版本文件,在migrations/version生成一个.py文件
python app.py db upgrade    # 同步: 生成数据库表
"""

      代码实例: 

        (1). 首页展示

        

 (2). 根据商品查看购买人

 

(3). 根据用户查购买商品 

 

 (4). 点击按钮实现用户和商品绑定

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/941866.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

「MySQL-05」MySQL Workbench的下载和使用

目录 一、MySQL workbench的下载和安装 1. MySQL workbench介绍 2. 到MySQL官网下载mysql workbench 3. 安装workbench 二、创建能远程登录的用户并授权 1. 创建用户oj_client 2. 创建oj数据库 3. 给用户授权 4. 在Linux上登录用户oj_client检查其是否能操作oj数据库 三、使用…

CSPM认证是什么?

​CSPM项目管理专业人员能力等级评价是由中国标准化协会(全国项目管理标准化技术委员会秘书处)和中国国际人才交流基金会联合发起的。 是依据《项目管理专业人员能力评价要求》(GB/T 41831-2022)国家标准,按照项目管理专业人员应具备的职业道…

六、性能测试之CPU分析

性能测试之CPU分析 一、回顾:性能测试分析的思路二、cpu知识1、影响cpu性能的物理因素:架构、主频、核2、结构:主要物理结构是3个,实际是有4个3、内存说人话(总结)4、内核&线程&架构5、查看cpu信息…

爬虫逆向实战(二十五)--某矿采购公告

一、数据接口分析 主页地址:某矿 1、抓包 通过抓包可以发现数据接口是cgxj/by-lx-page 2、判断是否有加密参数 请求参数是否加密? 通过查看“载荷”模块可以发现有一个param的加密参数 请求头是否加密? 无响应是否加密? 无c…

TypeScript配置-- 1. 新手处理TS文件红色波浪线的几种方式

Typescript 规范化了JS的项目开发,但是对一些项目的一些新手来说,确实是不怎么优好,譬如我:将我之前珍藏的封装JS代码,拿进了配置了tsconfig.json的vue3项目,在vscode下,出现了满屏的红色 &…

css学习7(盒子模型)

1、盒子模型图&#xff1a; Margin(外边距) - 清除边框外的区域&#xff0c;外边距是透明的。Border(边框) - 围绕在内边距和内容外的边框。Padding(内边距) - 清除内容周围的区域&#xff0c;内边距是透明的。Content(内容) - 盒子的内容&#xff0c;显示文本和图像。 <!DO…

接口自动化测试 —— Jmeter 6种定时器应用

①定时器是在每个sampler&#xff08;采样器&#xff09;之前执行的&#xff0c;而不是之后&#xff0c;不管这个定时器的位置放在sampler之后&#xff0c;还是之下&#xff0c;都在sampler之前得到执行 ②定时器是有作用域的&#xff0c;当执行一个sampler之前时&#xff0c;…

机器学习---决策树算法(CLS、ID3、CART)

1. 决策树 决策树&#xff08;Decision Tree&#xff09;又称为判定树&#xff0c;是运用于分类的一种树结构。其中的每个内部结点 &#xff08;internal node&#xff09;代表对某个属性的一次测试&#xff0c;每条边代表一个测试结果&#xff0c;叶结点&#xff08;leaf&am…

Flutter实现StackView

1.让界面之间可以嵌套且执行动画。 2.界面的添加遵循先进后出原则。 3.需要使用AnimateView&#xff0c;请看我上一篇博客。 演示&#xff1a; 代码&#xff1a; Stack: import package:flutter/cupertino.dart;///栈&#xff0c;先进后出 class KqWidgetStack {final Lis…

Excel显示此值与此单元格定义的数据验证限制不匹配怎么办?

总结&#xff1a;1、在编辑excel文档的时候&#xff0c;弹出此时预测单元格定义的数据验证&#xff0c;限制不匹配的提示。2、这是我们点击菜单来的数据菜单。3、然后点击数据工具栏的数据验证下拉按钮。4、在弹出的菜单中选择数据验证的菜单项。5、然后在打开的窗口中点击左下…

【附安装包】Adobe XD2022安装教程

软件下载 软件&#xff1a;Adobe XD版本&#xff1a;2022语言&#xff1a;简体中文大小&#xff1a;346.8M安装环境&#xff1a;Win11/Win10&#xff08;1809版本以上&#xff09;硬件要求&#xff1a;CPU2.0GHz 内存4G(或更高&#xff0c;不支持7代以下CPU&#xff09;下载通…

正中优配:新能源股票为何跌跌不休

从前在A股商场炙手可热、涨势如虹的新能源股票&#xff0c;比方光伏、风电、新能源轿车板块的股票&#xff0c;本年以来却是跌跌不休。有些从前的龙头股&#xff0c;看看K线图&#xff0c;走势用“疑是银河落九天”来描述好像也不为过。可是另一方面&#xff0c;这些新能源股票…

头条移动端项目Day06 —— kafka及异步通知文章上下架

❤ 作者主页&#xff1a;欢迎来到我的技术博客&#x1f60e; ❀ 个人介绍&#xff1a;大家好&#xff0c;本人热衷于Java后端开发&#xff0c;欢迎来交流学习哦&#xff01;(&#xffe3;▽&#xffe3;)~* &#x1f34a; 如果文章对您有帮助&#xff0c;记得关注、点赞、收藏、…

3d素材库素材资源平台大大节省老师备课时间

教育元宇宙相信大家有所耳闻&#xff0c;3D素材云库通过数字三维建模技术将现实中的物体、天气、灯光等1&#xff1a;1模拟还原到虚拟场景中&#xff0c;让人们在教育元宇宙平台中可视、可见、可感。 在元宇宙爆发的大背景下&#xff0c;3D互联网传播内容也将迎来一次全面升级&…

uniapp启动微信小程序开发者工具报错Enable IDE Service (y/N) 

下载安装好微信小程序开发者路径 配置好启动路径后 报错[微信小程序开发者工具] ? Enable IDE Service (y/N) [27D[27C 解决办法 因为微信开发者工具的服务端口号没有打开

人机对抗智能-部分可观测异步智能体协同(POAC)-(1)

环境链接&#xff1a;数据中心-人机对抗智能 (ia.ac.cn)http://turingai.ia.ac.cn/data_center/show/10 1.环境配置 Ubuntu 20.04 Anaconda python版本3.6 1.1 安装torch0.4.1失败 参考文章&#xff1a; 安装torch0.4.1的神坑_torch0.4.1_DEMO_Tian的博客-CSDN博客 co…

PostgerSql

建表修改字段等语句 1.建表 create table student ( id int, name varchar(30), birthday date, score numeric(5,2) ) 2.修改表名称 alter table student rename to student1; 3.修改表中列的类型 alter table student1 alter column name type varchar(40); 4.删除表的…

浙江大学提出自感知IMU网络精准捕获3D变形

运动捕捉目前有两种主流方法&#xff0c;视觉捕捉能捕获复杂的三维几何变形&#xff0c;但依赖于昂贵的光学设备并且存在视线遮挡问题&#xff1b;基于IMU的方法虽然简便&#xff0c;但难以捕获细微的3D变形。为了解决这个问题&#xff0c;浙江大学的研究者们提出了一种可配置的…

phpspreadsheet导出excel自动获得列,数字下标

安装composer require phpoffice/phpspreadsheetuse PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Writer\Xlsx; use PhpOffice\PhpSpreadsheet\Style\Border;$spreadsheet new Spreadsheet(); $sheet $spreadsheet->getActiveSheet();//从65开&a…

怎么建设ITIIL运维管理体系?

市场上大多数ITIL解决方案都过于复杂&#xff0c;让我们举一个客户希望实施ITIL方案的例子。首先&#xff0c;客户要通过ITIL咨询来定义ITIL流程&#xff0c;并使其与业务目标保持一致。接下来就是购买ITIL软件&#xff1b;大多数ITIL解决方案将事件、问题和变更管理作为不同的…