前言
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