Python-flask高级使用

文章目录

  • 一.Python-flask使用数据库
    • 第一步:首先安装包
      • 安装 flask-sqlalchemy (用于ORM):
      • 安装 flask-migrate (用于数据迁移):
      • 安装 pymysql (MySQL驱动):
    • 第二步:在__init__ 配置
    • 第三步:插件管理
      • 第一步:新建一个py:用于管理插件
      • 第二步:初始化插件
    • 第四步:在models新建model的类
    • 第五步:数据迁移(表变化,数据库里的表也需要自动变化)
  • 二. python-单表操作
    • 2.1添加
      • 2.1.1 添加单个信息
      • 2.1.2 添加多条信息
      • 2.1.3事务
    • 2.2 删除
      • 2.2.1 删除第一条数据
    • 2.3 修改
      • 2.3.1 修改第一条数据
    • 2.4 查找
      • 2.4.1 查找
    • 2.5 分页
      • 2.5.1 手动翻页
      • 2.5.2 自动翻页
  • 三. python-多表操作
    • 3.1:一对一
    • 3.2:一对多
      • 第一步:建立模型(类)
        • `建立关系方法一:`
        • `建立关系方法二:`推荐
      • 第二步:实操
        • 单表操作:添加主表:
        • 单表操作:添加子表:
        • 单表操作:修改、删除主表:
        • 多表操作:查询
    • 3.3:多对多
      • 第一步:建立模块
      • 第二步:实操

一.Python-flask使用数据库

第一步:首先安装包

安装 flask-sqlalchemy (用于ORM):

pip install flask-sqlalchemy -i https://pypi.douban.com/simple

安装 flask-migrate (用于数据迁移):

pip install flask-migrate -i https://pypi.douban.com/simple

安装 pymysql (MySQL驱动):

pip install pymysql -i https://pypi.douban.com/simple

第二步:在__init__ 配置

在这里插入图片描述

第三步:插件管理

第一步:新建一个py:用于管理插件

在这里插入图片描述

第二步:初始化插件

在这里插入图片描述
在这里插入图片描述

第四步:在models新建model的类

在这里插入图片描述

# models.py : 模型,数据库from .exts import db#  模型          数据库
#     类   ==> 表结构
#  类属性   ==>  表字段
# 一个对象  ==>  表的一行数据# 模型Model:类
#  必须继承 db.Model
class User(db.Model):# 表名__tablename__ = 'tb_user'# 定义表字段id = db.Column(db.Integer, primary_key=True, autoincrement=True)name = db.Column(db.String(30), unique=True, index=True)age = db.Column(db.Integer, default=1)sex = db.Column(db.Boolean, default=True)salary = db.Column(db.Float, default=100000, nullable=False)salary2 = db.Column(db.Float, default=100000, nullable=False)# db.Column : 表示字段
# db.Integer:表示整数
# primary_key=True : 主键
# autoincrement=True : 自动递增
# db.String(30): varchar(30) 可变字符串
# unique=True : 唯一约束
# index=True : 普通索引
# default=1 : 默认值
# nullable=False : 是否允许为空

第五步:数据迁移(表变化,数据库里的表也需要自动变化)

在这里插入图片描述

二. python-单表操作

在这里插入图片描述

2.1添加

2.1.1 添加单个信息

在这里插入图片描述

2.1.2 添加多条信息

在这里插入图片描述

2.1.3事务

在这里插入图片描述

2.2 删除

2.2.1 删除第一条数据

在这里插入图片描述

2.3 修改

2.3.1 修改第一条数据

在这里插入图片描述

2.4 查找

2.4.1 查找

在这里插入图片描述

 
# 查:查询数据
#   条件
@blue.route('/userget/')
def user_get():# all(): 返回所有数据,返回列表users = User.query.all()# print(users, type(users))  # <class 'list'># print(User.query, type(User.query))  # <class 'flask_sqlalchemy.query.Query'># filter() : 过滤,得到查询集,类似SQL中的whereusers = User.query.filter()# print(users, type(users))  # 查询集# print(list(users))# get():查询到对应主键的数据对象user = User.query.get(8)# print(user, type(user))  # User对象 <class 'App.models.User'># print(user.name, user.age)  # 获取数据的属性# filter() : 类似SQL中的where# filter_by() : 用于等值操作的过滤# users = User.query.filter(User.age==20)# users = User.query.filter_by(age=20)users = User.query.filter(User.age>20)  # 可以用于非等值操作# print(list(users))  # [冰冰20]# first() : 第一条数据# first_or_404(): 第一条数据,如果不存在则抛出404错误user = User.query.first()# user = User.query.filter_by(age=100).first_or_404()# print(user)# count(): 统计查询集中的数据条数users = User.query.filter()# print(users.count())  # 20# limit() : 前几条# offset() : 跳过前几条users = User.query.offset(3).limit(4)# print(list(users))# order_by() : 排序users = User.query.order_by('age')  # 升序users = User.query.order_by(desc('age'))  # 降序# print(list(users))# 逻辑运算:and_,or_,not_users = User.query.filter(User.age>20, User.age<25)  # 且,常用users = User.query.filter(and_(User.age>20, User.age<25))  # 且users = User.query.filter(or_(User.age>25, User.age<20))  # 或users = User.query.filter(not_(or_(User.age>25, User.age<20)))  # 非# print(list(users))# 查询属性# contains('3'): 模糊查找,类似SQL中的likeusers = User.query.filter(User.name.contains('3'))# in_(): 其中之一users = User.query.filter(User.age.in_([10, 20, 30, 40, 50]))# startswith() : 以某子串开头# endswith() : 以某子串结尾users = User.query.filter(User.name.startswith('冰'))  #users = User.query.filter(User.name.endswith('2'))# print(list(users))# __gt__: 大于users = User.query.filter(User.age.__gt__(25))print(list(users))return 'success'

2.5 分页

2.5.1 手动翻页


# 分页,翻页
#  1.手动翻页
#     offset().limit()
#  数据: 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20
#  页码:page=1
#  每页显示数量:per_page=5
#   page=1 :  1,2,3,4,5       =>  offset(0).limit(5)
#   page=2 :  6,7,8,9,10      =>  offset(5).limit(5)
#   page=3 :  11,12,13,14,15  =>  offset(10).limit(5)
#   page=4 :  16,17,18,19,20  =>  offset(15).limit(5)
#   ...                            ....
#   page=n :          =>  offset((page-1)*per_page).limit(per_page)users = User.query.offset((page-1)*per_page).limit(per_page)

2.5.2 自动翻页

# 2.paginate对象
@blue.route('/paginate/')
def get_paginate():# 页码:默认显示第一页page = int(request.args.get('page', 1))# per_page: 每页显示数据量per_page = int(request.args.get('per_page', 5))# print(page, type(page))# print(per_page, type(per_page))# paginate()p = User.query.paginate(page=page, per_page=per_page, error_out=False)# paginate对象的属性:# items:返回当前页的内容列表print(p.items)# has_next:是否还有下一页# print(p.has_next)# has_prev:是否还有上一页# print(p.has_prev)# next(error_out=False):返回下一页的Pagination对象# print(p.next(error_out=False).items)# prev(error_out=False):返回上一页的Pagination对象# print(p.prev(error_out=False).items)# page:当前页的页码(从1开始)print(p.page)# pages:总页数print(p.pages)# per_page:每页显示的数量# print(p.per_page)# prev_num:上一页页码数# print(p.prev_num)# next_num:下一页页码数# print(p.next_num)# total:查询返回的记录总数print(p.total)return render_template('paginate.html', p=p)

三. python-多表操作

3.1:一对一

在这里插入图片描述

3.2:一对多

在这里插入图片描述

第一步:建立模型(类)

在这里插入图片描述

建立关系方法一:

给子表添加relationship来应用外键指向那个orm(相对主表)模型
主表-子表都要添加
back_populates:告诉另个表,你在用我的时候,可以定义一个名字为back_populates='xxx’的,但是你要有这个属性

在这里插入图片描述

建立关系方法二:推荐

只在子表添加:backref=‘’’
子表:主动给主表绑定一个自身为单位的属性
在这里插入图片描述
返过来也可以:

子表:
在这里插入图片描述

主表:使用单引号
懒加载:用的时候才进行关联加载
在这里插入图片描述

第二步:实操

单表操作:添加主表:

在这里插入图片描述

单表操作:添加子表:

在这里插入图片描述

单表操作:修改、删除主表:

在这里插入图片描述

在这里插入图片描述
删除班级:因为是主表,所以会取消关联关系

在这里插入图片描述
在这里插入图片描述

多表操作:查询

在这里插入图片描述

在这里插入图片描述
正向查询:通过主表查子表

反向查询:通过子表查主表

通过主表查子表

在这里插入图片描述
在这里插入图片描述

3.3:多对多

在这里插入图片描述

第一步:建立模块

中间表有点特殊
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第二步:实操

增删改:同上

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

react+ts手写cron表达式转换组件

前言 最近在写的一个分布式调度系统&#xff0c;后端同学需要让我传入cron表达式&#xff0c;给调度接口传参。我去了学习了解了cron表达式的用法&#xff0c;发现有3个通用的表达式刚好符合我们的需求&#xff1a; 需求 每天 xx 的时间&#xff1a; 0 11 20 * * ? 上面是…

通过内网穿透技术实现USB设备共享(USB Redirector)逆向共享

文章目录 前言1. 安装下载软件1.1 内网安装使用USB Redirector1.2 下载安装cpolar内网穿透 2. 完成USB Redirector服务端和客户端映射连接3. 设置固定的公网地址 前言 USB Redirector是一款方便易用的USB设备共享服务应用程序&#xff0c;它提供了共享和访问本地或互联网上的U…

Python 机器学习入门之K-Means聚类算法

系列文章目录 第一章 Python 机器学习入门之线性回归 K-Means聚类算法 系列文章目录前言一、K-Means简介1、定义2、例子3、K-Means与KNN 二、 K-Means实现1、步骤2、优化2.1 初始化优化之K-Means2.2 距离优化之elkan K-Means 三、优缺点1、优点2、缺点 前言 学完K近邻算法&a…

【Java 进阶篇】JavaScript 动态表格案例

在这篇博客中&#xff0c;我们将深入了解JavaScript如何创建和操作动态表格。我们将从头开始构建一个动态表格&#xff0c;并逐步添加各种功能&#xff0c;使其能够实现数据的添加、删除和编辑。这个示例将有助于理解如何在前端开发中使用JavaScript创建交互性强大的表格。 准…

Linux | vim的入门手册

目录 前言 一、什么是vim 二、vim编辑器的模式 1、插入模式 &#xff08;1&#xff09;用vim打开文件 &#xff08;2&#xff09;进入插入模式 2、默认模式 &#xff08;1&#xff09;光标移动 &#xff08;2&#xff09;复制、粘贴与剪切操作 &#xff08;3&#x…

uniapp checkbox样式失效,选中框选中按钮不显示

找了很多方法 最后网上一个博主找到了解决方法 在项目的main.css里面 如果你不知道你的css样式在哪个文件夹 直接全局搜索‘ 找到注释两个地方 第一个 checkbox::before 找到这一行 注释箭头指的地方就可以 第二个 checkbox .uni-checkbox-input::before, 注释这两个地方…

垃圾邮件(短信)分类算法实现 机器学习 深度学习 计算机竞赛

文章目录 0 前言2 垃圾短信/邮件 分类算法 原理2.1 常用的分类器 - 贝叶斯分类器 3 数据集介绍4 数据预处理5 特征提取6 训练分类器7 综合测试结果8 其他模型方法9 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 垃圾邮件(短信)分类算…

腾讯云服务器上行带宽和下行带宽速度表

腾讯云服务器公网带宽下载速度计算&#xff0c;1M公网带宽下载速度是128KB/秒&#xff0c;5M带宽下载速度是512KB/s&#xff0c;腾讯云10M带宽下载速度是1.25M/秒&#xff0c;腾讯云百科txybk.com来详细说下腾讯云服务器不同公网带宽实际下载速度以及对应的上传速度对照表&…

Linux篇 五、Ubuntu与Linux板卡建立NFS服务

Linux系列文章目录 一、香橙派Zero2设置开机连接wifi 二、香橙派Zero2获取Linux SDK源码 三、香橙派Zero2搭建Qt环境 四、Linux修改用户名 文章目录 Linux系列文章目录前言一、连接到局域网互ping测试 二、安装NFS服务配置NFS更新exports配置三、板卡安装NFS客户端四、板卡临时…

php如何查找地图距离

要在PHP中使用高德地图、百度地图或腾讯地图获取位置信息&#xff0c;您可以使用它们的相应API服务。以下是获取位置信息的一般步骤&#xff1a; 思路: 获取API密钥&#xff1a;首先&#xff0c;您需要注册并获取相应地图服务提供商的API密钥。这将允许您访问他们的API以获取位…

数字图像处理实验记录二(直方图和直方图均衡化)

文章目录 一、基础知识1&#xff0c;什么是直方图2&#xff0c;直方图有什么用3&#xff0c;直方图均衡化4、原理代码实现 二、实验要求任务1&#xff1a;任务2&#xff1a; 三、实验记录任务1&#xff1a;任务2&#xff1a; 四、结果展示任务1&#xff1a;任务2&#xff1a; 五…

技巧 | 如何解决 OBS 系统声音无法捕获问题 | Mac

技巧 | 如何解决 OBS 系统声音无法捕获问题 | Mac 问题描述 由于 macOS 系统限制&#xff0c;桌面音频被禁止&#xff0c;导致在使用 OBS 无法录制桌面音频&#xff0c;只能使用自带麦克风录制。 解决方法 Loopback 介绍 借助 Loopback 的强大功能&#xff0c;可以轻松地…