前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Flask 学习-77.Flask-SQLAlchemy 一对一关系增删改查

Flask 学习-77.Flask-SQLAlchemy 一对一关系增删改查

作者头像
上海-悠悠
发布2022-09-28 16:42:45
3380
发布2022-09-28 16:42:45
举报
文章被收录于专栏:从零开始学自动化测试

前言

SQLAlchemy 连接到关系型数据库,关系型数据最擅长的东西就是关系。

一对一模型设计

有个Student 记录学生基本信息,Contact表记录学生联系方式,Student和Contact是一对一关系。

代码语言:javascript
复制
class Student(db.Model):
    __tablename__ = 'student'  # 数据库表名
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(50), unique=True, nullable=False)
    gender = db.Column(db.Enum("男", "女"), default=None, nullable=True)
    contact = db.relationship(
        'Contact', uselist=False, backref='student'
    )
    def save(self):
        """保存数据"""
        db.session.add(self)
        db.session.commit()

class Contact(db.Model):
    __tablename__ = 'contact'  # 数据库表名
    id = db.Column(db.Integer, primary_key=True)
    tel = db.Column(db.String(20), nullable=True)
    address = db.Column(db.String(150), nullable=True)
    user_id = db.Column(db.Integer, db.ForeignKey('student.id'))

    def save(self):
        """保存数据"""
        db.session.add(self)
        db.session.commit()

同步后生成student表

生成contact表

新增数据

两张表数据一起创建

代码语言:javascript
复制
from flask_restx import Namespace, Resource, fields, reqparse, marshal_with

api = Namespace('api', description='项目接口')
from apis import db
from .models import Student, Contact

@api.route('/add')
class StudentView(Resource):

    def post(self):
        """新增"""
        stu = Student(name='yoyo2')
        db.session.add(stu)
        db.session.flush()  # flush方法会生成Primary Key 得到card  的 id
        detail = Contact(address='上海市', user_id=stu.id)
        db.session.add(detail)
        db.session.commit()  # 提交
        return {"msg": "ok"}

创建成功

查询

正向查询:通过 Student 表查询关联表 Contact

代码语言:javascript
复制
stu = Student.query.filter_by(name='yoyo2').first()
# 查询关联表
print(stu.contact.address)  # 上海市

反向查询:通过 Contact 表反向查询 Student

代码语言:javascript
复制
con = Contact.query.filter_by(address='上海市').first()
print(con.student.name)  # yoyo2

反向查询是通过backref='student'参数关联起来。

2022年第 12期《python接口web自动化+测试开发》课程,9月17号开学!

本期上课时间:2022年9月17号 - 2022年12月17号,周六周日上午9:00-11:00

报名费:报名费3000一人(周期3个月)

联系微信/QQ:283340479

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-09-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 从零开始学自动化测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 一对一模型设计
  • 新增数据
  • 查询
    • 报名费:报名费3000一人(周期3个月)
      • 联系微信/QQ:283340479
      相关产品与服务
      关系型数据库
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档