Flask 学习-77.Flask-SQLAlchemy 一对一关系增删改查
前言
SQLAlchemy 连接到关系型数据库,关系型数据最擅长的东西就是关系。
一对一模型设计
有个Student 记录学生基本信息,Contact表记录学生联系方式,Student和Contact是一对一关系。
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表
新增数据
两张表数据一起创建
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
stu = Student.query.filter_by(name='yoyo2').first()
# 查询关联表
print(stu.contact.address) # 上海市
反向查询:通过 Contact 表反向查询 Student
con = Contact.query.filter_by(address='上海市').first()
print(con.student.name) # yoyo2
反向查询是通过backref='student'
参数关联起来。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2021-09-23 python测试开发django-139.Bootstrap 中关于图片的显示(img-responsive)
2020-09-23 python笔记47-面试题:如何判断字典a在字典b
2019-09-23 httprunner学习9-完整的用例结构(yaml&json)
2017-09-23 Appium+python自动化20-查看iOS上app元素属性