当前位置:网站首页>flask一对多数据库创建,基础增删改查
flask一对多数据库创建,基础增删改查
2022-07-27 05:02:00 【Csdn__F】
数据库字段常用类型
| 数据类型 | 解释 |
|---|---|
| Integer | 一个整数(*****) |
| String (size) | 有长度限制的字符串(*****) |
| Text | 一些较长的 unicode 文本(*****) |
| DateTime | 表示为 Python datetime 对象的 时间和日期(*****) |
| Float | 存储浮点值 |
| Boolean | 存储布尔值 |
| DECIMAL | 十进制,多用于价格 |
一对多模型类创建
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
# 1.一对多关系的建立: 一方建立关系, 多方建立外键
# 专业模型
class Sub(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(32))
# 一方定义关系, 关联Stu模型, Stu为模型类名,
# backref的值是给"多方"用来查询"一方"的
stu = db.relationship('Stu', backref='sub')
# 学生模型
class Stu(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(32))
# 多方定义外键, 关联sub.id
# sub是在数据库里面的表名不是模型类名字
sub_id = db.Column(db.Integer, db.ForeignKey('sub.id'))
Flask-RESTful提供RequestParser类, 用来帮助我们检验和转换请求数据. 它设计成提供简单并且统一的访问Flask.request对象里的任何变量的入口
RequestParser()校验参数可选字段(部分)
| 可选参数 | 作用 | 案例 |
|---|---|---|
| type | 参数类型 | type=int |
| help | 错误提示 | help=“id不可以为空” |
| required | 是否必须(默认为Flase) | required=True |
| choices | 特定的值 | choices=[‘男’,‘女’] |
| default | 如果不传,默认值 | default=18 |
增删改查
查询
from flask import Blueprint, jsonify
from models.model import *
from flask_restful import marshal, fields, reqparse
def get(self):
# 获取一方所有数据
sub = Sub.query.all()
# 序列化数据
# marshal()方法直接序列化数据
# sub: 要序列化的数据
# {id...}: 要序列化的字段
data = marshal(sub, {
"id": fields.Integer,
"name": fields.String,
})
# 返回json格式响应
return jsonify({
'code': 200, 'msg': '数据获取成功', 'data': data})
增加
def post(self):
# 构建RequestParser()对象
# 实例化
req = reqparse.RequestParser()
# 添加校验字段
req.add_argument("name")
# 可选参数(部分)
# type=int # 参数类型
# help="id不可以为空" # 错误提示
# required=True # 是否必须
# action="append" # 出现同名参数如何处理,append追加,store 保留第一个
# choices=['男','女'] # 特定的值
# default=18 # 如果不传,默认值
# 启动检验处理
args = req.parse_args()
#
s1 = Sub(
name=args["name"],
)
db.session.add(s1)
# 提交事务
db.session.commit()
return jsonify({
'code': 200, 'msg': '数据添加成功'})
修改
def put(self):
req = reqparse.RequestParser()
req.add_argument("id")
args = req.parse_args()
# 第一种方法
# 直接修改
Sub.query.filter(Sub.id == args["id"]).update(
args
)
# 第二种方法
# 先获取 然后赋值修改
sub = Sub.query.filter(Sub.id == args["id"]).first()
# 赋值
sub.name=args["name"]
# 提交事务
db.session.commit()
return jsonify({
'code': 200, 'msg': '数据修改成功'})
删除
def delete(self):
req = reqparse.RequestParser()
req.add_argument("id")
args = req.parse_args()
Sub.query.filter(Sub.id == args['id']).delete()
db.session.commit()
return jsonify({
'code': 200, 'msg': '数据删除成功'})
边栏推荐
猜你喜欢

Li Hongyi machine learning team learning punch in activity day03 --- error and gradient decline

Bean的生命周期&&依赖注入*依赖自动装配

JVM Part 1: memory and garbage collection part 12 -- stringtable

String class

李宏毅机器学习组队学习打卡活动day01---机器学习介绍

消息可靠性处理

ERP system brand

JVM Part 1: memory and garbage collection part 6 -- runtime data area local method & local method stack

数据库连接池&&Druid使用

素数筛选(埃氏筛法,区间筛法,欧拉筛法)
随机推荐
322 coin change of leetcode
Critical path principle
Multiplication sorting in torch, * & torch. Mul () & torch. MV () & torch. Mm () & torch. Dot () & @ & torch. Mutmal ()
Flask请求数据获取与响应
JVM part I: memory and garbage collection part II -- class loading subsystem
redis持久化
cookie增删改查和异常
枚举类实现单例模式
B1025 反转链表*******
求组合数(最强优化)
强制登录,七牛云上传图片
B1029 old keyboard
Idea remote debugging
李宏毅机器学习组队学习打卡活动day02---回归
JVM Part 1: memory and garbage collection part 8 - runtime data area - Method area
JVM Part 1: memory and garbage collection part 12 -- stringtable
Alphabetic order problem
268.missing number of leetcode
SQL数据库→约束→设计→多表查询→事务
redis事务