Flask-SQLAlchemy一对多 一对一 多对多关联

一. 组织一个 Flask 项目通常需要遵循一定的结构,以便代码清晰、可维护。下面是一个典型的 Flask 项目结构:

my_flask_app/
│
├── app/
│   ├── __init__.py
│   ├── models.py
│   ├── views.py
│   ├── forms.py
│   ├── templates/
│   │   ├── base.html
│   │   ├── index.html
│   └── static/
│       ├── css/
│       ├── js/
│       └── images/
│
├── migrations/
│
├── tests/
│   ├── __init__.py
│   ├── test_app.py
│
├── venv/
│
├── config.py
│
├── manage.py
│
├── requirements.txt
│
└── README.md

目录和文件说明

app/
  • __init__.py: 初始化 Flask 应用,注册蓝图和扩展。
  • models.py: 数据库模型定义。
  • views.py: 视图函数,处理路由和请求。
  • forms.py: 表单定义(如果使用 Flask-WTF)。
  • templates/: HTML 模板文件。
  • static/: 静态文件(CSS、JavaScript、图像等)。
migrations/
  • 数据库迁移文件夹,用于存储 Alembic 生成的迁移脚本。
tests/
  • 测试代码文件夹。
venv/
  • 虚拟环境文件夹。
config.py
  • 配置文件,存储应用配置变量。
manage.py
  • 管理脚本,用于启动应用和其他管理任务。
requirements.txt
  • 依赖文件,列出所有需要安装的 Python 包。
README.md
  • 项目说明文件,提供项目的基本信息和使用说明。

1. 在 Flask-SQLAlchemy 中,实现 一对多 和 一对一 还有多对多关联可以通过以下方式:

1.1 一对多关联

        假设有两个模型,Author(作者)和 Book(书籍),一个作者可以有多本书。

from flask_sqlalchemy import SQLAlchemydb = SQLAlchemy()class Author(db.Model):id = db.Column(db.Integer, primary_key=True)name = db.Column(db.String)# 定义与 Book 模型的一对多关系books = db.relationship('Book', backref='author')class Book(db.Model):id = db.Column(db.Integer, primary_key=True)title = db.Column(db.String)author_id = db.Column(db.Integer, db.ForeignKey('author.id'))

在上述示例中,通过在 Author 模型中定义 books 属性,并在 Book 模型中定义 author_id 外键来建立一对多的关系。

2. 一对一关联

        假设 User(用户)和 Profile(用户资料)是一对一的关系。

class User(db.Model):id = db.Column(db.Integer, primary_key=True)name = db.Column(db.String)# 定义与 Profile 模型的一对一关系profile = db.relationship('Profile', uselist=False, backref='user')class Profile(db.Model):id = db.Column(db.Integer, primary_key=True)user_id = db.Column(db.Integer, db.ForeignKey('user.id'))bio = db.Column(db.String)

在上述示例中,通过在 User 模型中设置 relationship 的 uselist=False 来表示一对一关系。

在实际使用中,通过这些关联关系,可以方便地进行查询、添加、更新和删除等操作,例如获取某个作者的所有书籍,或者获取某个用户的资料等。

3. 多对多关联:

'''<--------------> 多对多模型 <-------------->'''
tags = db.Table('tags',db.Column('tag_id', Integer, db.ForeignKey('tag.id')),db.Column('page_id', Integer, db.ForeignKey('page.id')))class Page(db.Model):id = db.Column(db.Integer, primary_key=True)tags = db.relationship('Tag', secondary=tags,backref=db.backref('pages', lazy='dynamic'))class Tag(db.Model):id = db.Column(db.Integer, primary_key=True)

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

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

相关文章

【Matlab 肌电信号分析】

一、数据预处理 1.1 数据读取 使用matlab从rhd文件中读取原始数据&#xff0c;共64个通道。 1.2 数据滤波 使用 60Hz的Notch filter 和150Hz的高通Butterworth滤波器进行降噪 二、波峰提取 > 每个通道分别根据相应的规则提取出波峰、波谷附近的波形。 三、信号聚类 3.1 降…

Postman接口测试、Python接口自动化测试

接口自动化测试笔记&#xff0c;自用 来源&#xff1a;https://www.bilibili.com/video/BV1Cs4y1C73Hp45&vd_source37bf552472afa993fb78c918d1dea2bc 目录 一、Postman接口测试 1.postman自动关联 1&#xff09;创建环境并选择 2&#xff09;使用自动关联技术&#xf…

iPhone 上丢失了重要的联系人?如何恢复已删除的 iPhone 联系人

丢失 iPhone 上的联系人可能会带来灾难。无论是一份很棒的新工作机会、潜在的恋爱对象&#xff0c;还是您一直想打电话的老朋友&#xff0c;如果您打开“联系人”应用时看到空白&#xff0c;这绝不是好事。不过&#xff0c;一切并非全无&#xff0c;仍然可以通过备份或专业软件…

月薪14K的网安公司,来做一下笔试题呀~

《网安面试指南》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484339&idx1&sn356300f169de74e7a778b04bfbbbd0ab&chksmc0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene21#wechat_redirect 网络安全简介…

【Linux】基础IO认识(2)

基础IO认识&#xff08;2&#xff09; 1、补充系统调用1、1、read调用1、2、stat 2、重定向2、1、文件描述符的分配规则2、2、实现重定向(dup2) 3、缓冲区的理解3、1、缓冲区典型实例3、2、缓冲区代码形式展示 4、深化和实践利用4、1、在shell中加入重定向4、2、简单实现库的封…

模拟火车世界5/Train Sim World 5 (容量289GB)百度网盘下载

版本介绍 Build.15665692|容量289GB|官方简体中文|支持键盘.鼠标.手柄 游戏介绍 来《模拟火车世界5》里&#xff0c;全世界的铁路尽属于你&#xff01;在标志性的特色城市中&#xff0c;驾驶列车穿越铁轨&#xff0c;飞驰在 3 条全新线路上&#xff0c;用新的角色迎接新的挑战…

教师薪酬管理系统的设计与实现

摘 要 传统信息的管理大部分依赖于管理人员的手工登记与管理&#xff0c;然而&#xff0c;随着近些年信息技术的迅猛发展&#xff0c;让许多比较老套的信息管理模式进行了更新迭代&#xff0c;老师信息因为其管理内容繁杂&#xff0c;管理数量繁多导致手工进行处理不能满足广…

【FreeRL】Rainbow_DQN的实现和测试

文章目录 前言环境1 PER note2 C51 note3 Noisy note4 Rainbow note其他 前言 具体代码实现见&#xff1a;https://github.com/wild-firefox/FreeRL/blob/main/DQN_file/DQN_with_tricks.py 将其中所有的trick都用上即为Rainbow_DQN。 效果如下&#xff1a;&#xff08;学习曲…

vue 案例使用

el-switch 按键的使用 <el-switchclass"switchStyle" v-model"boolValue" :active-value"1" :inactive-value"0" active-text"ON" inactive-text"OFF" active-color"#13ce66" inactive-color&qu…

明星御用剪辑师亲授:PR剪辑技巧大全

在这个视频内容大爆炸的时代&#xff0c;一个好的剪辑工具就如同一位得力的助手&#xff0c;能让你在视频制作的道路上事半功倍。今天&#xff0c;就让我来为大家揭秘几款PR剪辑工具&#xff0c;它们各具特色&#xff0c;能够帮助你轻松应对各种剪辑需求。让我们开始吧&#xf…

kali——tshark的使用

目录 前言 使用方法 tshark提取流量为文档 前言 tshark 是一个命令行的网络分析工具&#xff0c;它用于捕获和分析网络流量。它支持多种网络协议&#xff0c;包括 TCP、UDP、ICMP 等。Tshark 可以用于调试网络问题、进行安全审计、分析应用程序性能等。 在 Kali Linux 中&…

绿咖啡豆缺陷检测系统源码分享

绿咖啡豆缺陷检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer…

ubuntu虚拟机装载共享文件夹导致的诡异错误

最近使用vmware station 15 安装了 ubuntu22.04 的虚拟机。在装载共享文件夹不久后便会出现诡异的错误。目前在网络上好像没有人把这归结到装载共享文件夹的问题上&#xff0c;故以供参考。 第一次&#xff1a; 在装载之后大概第二次开机&#xff0c;出现报错界面。 提示蓝牙…

驱动器磁盘未格式化恢复实战

驱动器磁盘未格式化的深度剖析 在日常的数字生活中&#xff0c;驱动器作为数据存储的重要载体&#xff0c;承载着用户无数的珍贵资料。然而&#xff0c;当遇到“驱动器中的磁盘未被格式化”的提示时&#xff0c;这份平静往往会被瞬间打破。这一状况不仅让用户感到困惑和焦虑&a…

精选评测!分享5款AI写论文最好用的软件排名

写作是一项既费时又费力的任务&#xff0c;尤其是对于科研人员来说&#xff0c;撰写论文更是一项必不可少的挑战。幸运的是&#xff0c;现在有多款免费的AI写作工具可以大大简化这一过程。小编精心挑选了5款免费的AI写作工具&#xff0c;旨在帮助大家提高写作效率&#xff0c;让…

word文档的读入(8)

如何读取答题卡中的选择题答案&#xff0c;并把所有的信息导入到Excel表格中&#xff5e; 在初始化了字典中的字段并获取了标准答案和学生答案后&#xff0c;现在只需使用if语句将学生答案studentAnswerOne和标准答案value进行比较。选择题一道题2分&#xff0c;答案正确时&…

pgsql的威胁操作--危险行为

pgsql的威胁操作--危险行为 要在PostgreSQL中列出所有数据库并删除指定的数据库 进入容器Pgsql docker exec -it 04d438beab57 /bin/bash 登录pgsql 使用以下命令登录到PostgreSQL psql -U postgres -h localhost -p 5432 列出数据库详细信息 postgres# \l 这将显示所有…

C语言代码练习(第二十六天)

今日练习&#xff1a; 数据的交换输出输入 n 个数&#xff0c;找出其中最小的数&#xff0c;将它与最前面的数交换后输出这些数 输入一个英文句子&#xff0c;将每个单词的第一个字母改成大写字母 输入一个十进制数 N &#xff0c;将它转换成 R 进制数输出 数据的交换输出输入 …

34.贪心算法1

0.贪心算法 1.柠檬水找零&#xff08;easy&#xff09; . - 力扣&#xff08;LeetCode&#xff09; 题目解析 算法原理 代码 class Solution {public boolean lemonadeChange(int[] bills) {int five 0, ten 0;for (int x : bills) {if (x 5) // 5 元&#xff1a;直接收下…

【Git】将本地项目上传到git | 在IDEA的提交记录中更改 提交的用户名

一:将本地项目上传到git 1:在​gitee​上创建以自己项目名称命名的空项目【注意项目名称与本地项目的文件夹名称一致】 2:进入想上传的项目的文件夹,然后右键点击 3:查看用户名及邮箱 $ git config user.name $ git config user.email4: 配置你的用户名及邮箱【如果有…