当前位置: 首页 > news >正文

【Python】进阶之 MySQL入门教程

文章目录

  • 数据库概述
  • Mysql概述
  • Mysql安装与使用
  • Navicat安装和使用
  • Mysql终端指令操作
  • Mysql和python交互
  • 订单管理案例实现

数据库概述

  • 数据库的由来

    发展历程说明
    人工管理阶段用纸带等进行数据的存储
    文件系统阶段数据存储在文件中
    数据库阶段解决了文件系统问题
    高级数据库阶段分布式数据库
  • 数据库的分类

    数据库分类说明常用库
    关系型数据库采用了关系模型来组织数据的数据库:关系模型指的就星二维表格模型Oracle
    Microsoft SQL Server
    MySQL
    SQLite
    非关系型数据库Not Only SQL
    强调Key-Value的方式存储数据
    Mongodb
    redis
  • 关系型数据库的使用场景
    Web网站系统、日志记录系统、数据仓库系统、嵌入式系统

Mysql概述

MySQL是一个 关系型数据库管理系统 \color{red}{关系型数据库管理系统} 关系型数据库管理系统软件。

  • 关系型数据库管理系统-RDBMS
    MySQL是一个关系型数据库管理系统软件,在WEB应用方面,MySQL是最好的RDBMS(Relational Database Management System, 关系数据库管理系统)应用软件,它是由瑞典MySQL AB司开发,目前属于Oracle旗下产品,MySQL是最流行的关系型数据库管理系统中的一个。

  • 关系型数据库管理系统可以分为:

    1. 关系型数据库服务端软件-Server
    2. 关系型数据库客户端软件-Client
  • 关系型数据库管理系统的流程图:
    在这里插入图片描述

  • 关系型数据库管理系统的通信流程效果图:
    在这里插入图片描述

  • SQL介绍
    SQL(Structured Query Language)是 结构化查询语言 \color{red}{结构化查询语言} 结构化查询语言,是一种用来操作 R D B M S \color{red}{RDBMS} RDBMS的数据库的语言,也就是说通过SQL可以操作oracle, sql server, mysql, sqlite等关系型的数据库。

  • SQL语言的分类

    简写语义说明
    DQL数据查询语句select
    DML数据操作语句insert
    update
    delete
    DDL数据定义语句creat
    drop
    TPL事务处理语言begin transaction
    commit
    rollback
    DCL数据控制语言grant
    revoke
  • MySQL的特点

    1. MySQL是开源的,所以你不需要支付额外的费用。
    2. M小ySQL支持大型的数据库。可以处理拥有上干万条记录的大型数据库。
    3. MySQL使用标准的SQL数据语言形式。
    4. MySQL可以安装在不同的操作系统,并且提供多种编程语言的操作接口。这些编程语言包括C、C++、Python、Java、Ruby等等。
  • MySQL的数据类型

    数据类型说明
    int, bit整数
    decimal小数
    varchar, char字符串
    date, time, datetime日期和时间
    enum枚举类型
  • MySQL的字段约束

    约束参数说明
    primary key主键约束
    not null非空约束
    unique唯一约束
    default默认约束

Mysql安装与使用

  • Mysql安装
    MySQL数据库 服务 \color{red}{服务} 服务端软件的安装:sudo apt-get install mysql-server
    MySQL数据库 客户 \color{red}{客户} 客户端软件的安装:sudo apt-get insatll mysql-client
  • Mysql数据库服务端启动
    查看MySQL服务状态:sudo service mysql status
    停止MySQL服务:sudo service mysql stop
    启动MySQL服务:sudo service mysql start
    重启MySQL服务:sudo service mysql restart
  • Mysql的配置文件
    1. mqsql配置文件的路径:/etc/mysql/mysql.conf.d/
      在这里插入图片描述
    2. 配置项介绍
      <1> port表示端口,默认为3306;
      <2> bind-address表示服务器绑定的ip,默认为127.0.0.1;
      <3> datadir表示数据库保存路径,默认为/var/lib/mysql;
      <4> log_error表示错误日志,默认为/var/log/mysql/error.log;

Navicat安装和使用

  • Navicat介绍
    Navicat是一款图形化界面的数据库客户端软件。
  • Navicat的安装——基于Linux操作系统
    1. 官网下载安装包:https://www.navicat.com.cn
    2. 解压navicat安装包:tar -zxvf navicat112_mysql_cs_x64.tar.gz
    3. cd到navicat安装包文件夹目录:cd navicate112_mysql_cs_x64
    4. 运行navicat:./start_navicat

    安装包及破解工具下载: 百度网盘 【提取码:4KaE】
    破解教程:Navicat Premium15永久破解版安装教程

  • Navicat的连接mysql服务
    在这里插入图片描述

Mysql终端指令操作

  • Mysql登录登出客户端
    连接mysql服务端指令:mysql -uroot -p
    显示当前时间:select now();
    退出连接:exit/quit/[control+d]
    在这里插入图片描述
  • Mysql数据库操作
    查看所有数据库:show databases;
    创建数据库:create database 数据库名 charset=utf-8;
    使用数据库:use 数据库名;
    查看当前使用的数据库:select database();
    删除数据库:drop database 数据库名;
    在这里插入图片描述
  • Mysql表操作
    查看所有当前库中的所有表:show tables;
    创建表:create table 表名(字段名称 数据类型 可选的约束条件, column1 datatype contral, ...);
    修改表字段类型:alter table 表名 modify 列名 类型 约束;
    删除表:drop table 表名;
    查看表结构:desc 表名;
    在这里插入图片描述
  • Mysql -CRUD操作
    1. 查询数据
      查询所有列:select * from 表名;
      查询指定列:select 列名1, 列名2,... from 表名;
      在这里插入图片描述
    2. 增加数据
      全列插入 - 值的顺序必须和字段顺序完全一致:insert into 表名 values(...);
      部分列插入 - 值的顺序和给出的列的顺序对应:insert into 表名(列1, 列2,...) values(值1, 值2,...)
      全列多行插入:insert into 表名 values(...), (...), (...);
      部分列多行插入:insert into 表名(列1, 列2,...) values(值1,...), (值1,...), (值1,...)
      在这里插入图片描述
    3. 修改数据update 表名 set 列1=值1, 列2=值2,... where 条件;
      在这里插入图片描述
    4. 删除数据delete from 表名 where 条件;
      在这里插入图片描述
  • Mysql数据库备份和恢复
    1. 备份导出:mysqldump -u用户名 -p密码 数据库名 表名 > data.sql (注意:不写表名默认导出所有数据表)
      在这里插入图片描述

    2. 恢复导入:

      cd 到数据文件路径下
      mysql -u用户名 -p密码
      use 数据库
      source data.sql
      

      在这里插入图片描述

Mysql和python交互

  • pymysql的安装
    安装pymysql:sudo pip3 install pymysql
    查看安装情况:pip show pymysql / pip3 list
    卸载pymysql:sudo pip3 uninstall pymysql
    在这里插入图片描述

  • pymysql的使用

    1. 导包:import pymysql
    2. 创建和mysql服务端的连接对象:conn = pymysql.connect(参数列表)
    3. 获取游标对象:cursor = conn.cursor()
    4. 执行sql语句:row_count = cursor.execute(sql)
    5. 获取查询结果集:result = cursor.fetchall()
    6. 将增加和修改操作提交到数据库:conn.commit()
    7. 回滚数据:conn.rollback()
    8. 关闭游标对象:cursor.close()
    9. 关闭连接:conn.close()
  • pymysql查询数据

    # 查询数据库goods下student表中的所有数据
    # 1. 导包
    import pymysqltry:# 2. 连接mysql数据库的服务conn = pymysql.Connect(# mysql服务端的IP,默认127.0.0.1/localhost,也可填真实iphost='192.168.90.172',user='root',password='mysql',database='goods',port=3306,charset='utf8')# 3. 创建游标对象cur = conn.cursor()# 4. 编写sql语句sql = 'select * from students;'# 5. 使用游标对象去调用sqlcur.execute(sql)# 6. 获取查询的结果并打印result = cur.fetchall()print(result)# 7. 关闭游标对象cur.close()# 8. 关闭连接conn.close()
    except Exception as e:print(e)
    

    结果如下:
    在这里插入图片描述

  • pymysql增删改数据

    '''
    对数据库goods下的students表进行如下操作:
    1. 增加数据:李磊 35 男
    2. 修改数据:李磊的名字改为王磊
    3. 删除数据:王磊
    '''# 1. 导包
    import pymysql# 2. 连接mysql数据库的服务
    conn = pymysql.Connect(# mysql服务端的IP,默认127.0.0.1/localhost,也可填真实iphost='192.168.90.172',user='root',password='mysql',database='goods',port=3306,charset='utf8'
    )
    # 3. 创建游标对象
    cur = conn.cursor()
    try:# 4. 编写增加、修改、删除的sql语句add_sql = 'insert into students values(%s, %s, %s, %s);'add_data = [0, '李磊', 35, '男']update_sql = 'update students set name=%s where name = "李磊";'update_data = ['王磊']delete_sql = 'delete from students where name=%s;'delete_data = ['王磊']# 5. 使用游标对象执行sqlcur.execute(add_sql, add_data)cur.execute(update_sql, update_data)cur.execute(delete_sql, delete_data)# 6. 提交操作conn.commit()
    except Exception as e:print(e)# 数据回滚conn.rollback()
    finally:# 7. 关闭游标对象cur.close()# 8. 关闭连接conn.close()
    

订单管理案例实现

  • 需求分析
    在这里插入图片描述
    ① 创建数据库orders
    ② 创建orders订单表
    ③ 插入测试数据orders.sql
    ④ Python和Mysql交互
    ⑤ 查询订单数据
    ⑥ 增加订单数据
    ⑦ 删除订单数据
    ⑧ 修改订单数据

  • 实现步骤

    1. 建库和建表

      --创建数据库
      create database orders charset=utf8;--创建数据表
      create table orders(id int not null auto_increment primary key,count int not null,price decimal(10,2) not null,freight decimal(10,2) not null,user varchar(50) not null,status enum('待支付','待发货','待收货') default '待支付' not null,time date not null);
      
    2. 插入测试数据
      ① cd素材的目录下
      ② 登录mysql客户端:mysql -uroot -p
      ③ 切换数据库: use orders
      ④ 导入测试数据:source orders.sql
      在这里插入图片描述

    3. 实现订单查询功能
      ① 导包pymysql
      ② 连接mysql服务
      ③ 创建游标对象
      ④ 编写查询所有订单SQL语句
      ⑤ 执行SQL语句
      ⑥ 获取所有查询的结果
      ⑦ 将获取结果转换成列表字典格式
      ⑧ 对Mysql的操作加Try处理

      # 1 导包
      import pymysqldef order()# 2 链接mysql的服务端conn = pymysql.Connect(user='root',password='mysql',host='192.168.90.172',database='orders',port=3306,charset='utf8')# 3 创建游标对象cur = conn.cursor()try:# 4 编写 查询orders表的所有数据SQLsql = 'select * from orders;'# 5 使用游标对象执行SQLcur.execute(sql)# 6 获取查询的所有数据 fetchall() ==>元组result = cur.fetchall()print('查询数据:', result)# 打印结果如下:# 查询数据:((1, 2, Decimal('100.00'), Decimal('10.00'), '老王', ‘待收货', datetime.data(2020, 1, 1)), (2, 3, Decimal('200.00'), Decimal('25.00'), '钱红', ’待支付', datatime.date(2020, 4,1)))# 7 将数据转换成[{}, {}]data_lst = []for row in result:data_lst.append({'id': row[0],'count': row[1],'price': str(row[2]),'freight': str(row[3]),'user': row[4],'status': row[5],'time': str(row[6])})# 8 加个try优化下except Exception as e:print('报错信息:', e)finally:# 关闭游标对象cur.close()# 关闭连接conn.close()
      
    4. 实现订单增加功能
      ① 导包pymysql
      ② 连接mysql服务
      ③ 创建游标对象
      ④ 编写增加订单的SQL语句
      ⑤ 执行SQL语句并提交
      ⑥ 对Mysql的操作加Try处理

      # 1 导包
      import pymysqldef add(data):# 2 链接mysql的服务端conn = pymysql.Connect(user='root',password='mysql',host='192.168.90.172',database='orders',port=3306,charset='utf8')# 3 创建游标对象cur =conn.cursor()try:# 4 编写 增加数据的SQLsql = 'insert into orders values(%s,%s,%s,%s,%s,%s,%s)'# 5 使用游标对象执行SQL并提交cur.execute(sql, data)conn.commit()# 6 加个try优化下except Exception as e:print('报错信息:', e)# 回滚数据conn.rollback()finally:# 关闭游标对象cur.close()# 关闭连接conn.close()
      
    5. 实现封装功能函数
      查询和增加的功能重复度比较高,均有:导包、连接mysql、创建游标对象、执行SQL语句、Try语句。实现封装函数的操作:
      ① 定义封装函数的名字
      ② 粘贴重复度高的代码
      ③ 提交参数
      ④ 测试

      # 1 导包
      import pymysql# 封装一个执行CRUD的函数
      def execute_crud_sql(sql,data):# 2 链接mysql的服务端conn = pymysql.Connect(user='root',password='mysql',host='192.168.90.172',database='orders',port=3306,charset='utf8')# 3 创建游标对象cur = conn.cursor()try:# 4 编写 查询orders表的所有数据SQL# 5 使用游标对象执行SQLcur.execute(sql, data)# 6 提交操作conn.commit()# 8 加个try优化下except Exception as e:print('报错信息:', e)# 回滚数据conn.rollback()finally:# 关闭游标对象cur.close()# 关闭连接conn.close()def add(data):sql = 'insert into orders values(%s,%s,%s,%s,%s,%s,%s)'execute_crud_sql(sql, data)
      
    6. 实现订单修改和删除功能

      # 修改的SQL语句
      update orders set count=%s, price=%s, freight=%s, user=%s, status=%s, time=%s where id=%s;
      # 将参数中id的顺序从第一个颠倒到最后一个
      data.append(data.pop(0))# 删除的SQL语句
      delete from orders where id=%s;
      
      # 1 导包
      import pymysql# 封装一个执行CRUD的函数
      def execute_crud_sql(sql,data):# 2 链接mysql的服务端conn = pymysql.Connect(user='root',password='mysql',host='192.168.90.172',database='orders',port=3306,charset='utf8')# 3 创建游标对象cur = conn.cursor()try:# 4 编写 查询orders表的所有数据SQL# 5 使用游标对象执行SQLcur.execute(sql, data)# 6 提交操作conn.commit()# 8 加个try优化下except Exception as e:print('报错信息:', e)# 回滚数据conn.rollback()finally:# 关闭游标对象cur.close()# 关闭连接conn.close()# 修改订单数据
      def update(data):print('修改的数据:', data)   # ['7', '99', '9.90', '1.00', '明明','待收货', '2020-03-29']data.append(data.pop(0))# 1. 修改的SQL语句sql = 'update orders set count=%s, price=%s, freight=%s, user=%s, status=%s, time=%s where id=%s'# 2. 执行调用execute_crud_sql(sql, data)# 删除订单数据    
      def delete(data):# 1. 删除的SQL数据sql = 'delete from orders where id=%s;'# 2. 执行execute_crud_sql(sql, data)
      

相关文章:

【Python】进阶之 MySQL入门教程

文章目录 数据库概述Mysql概述Mysql安装与使用Navicat安装和使用Mysql终端指令操作Mysql和python交互订单管理案例实现 数据库概述 数据库的由来 发展历程说明人工管理阶段用纸带等进行数据的存储文件系统阶段数据存储在文件中数据库阶段解决了文件系统问题高级数据库阶段分布式…...

Word 2019打开.doc文档后图片和公式不显示(呈现为白框)的解决办法

Word 2019打开.doc文档后图片和公式不显示&#xff08;呈现为白框&#xff09;的解决办法 目录 Word 2019打开.doc文档后图片和公式不显示&#xff08;呈现为白框&#xff09;的解决办法一、问题描述二、解决方法1.打开 WORD 2019&#xff0c;点击菜单中的“文件”&#xff1b;…...

三个整数排序

描述 给定三个整数&#xff0c;请将它们按从小到大的顺序输出。 输入 输入为一行&#xff0c;包含三个整数&#xff0c;用空格分隔。 输出 输出为一行&#xff0c;包含三个整数&#xff0c;用空格分隔&#xff0c;表示排序后的结果。 输入样例 1 9 3 7 输出样例 1 3 …...

Nginx反向代理出现错误 502 bad gateway 案例解析

场景描述 Nginx uwsgi flask Flask框架写的程序&#xff0c;使用uwsgi启动&#xff0c;Nginx作为反向代理调用Flask应用。 Flask应用有些操作时间比较长&#xff0c;会超过1分钟&#xff0c;在网页端访问会出现错误: 502 bad gateway。 Nginx的错误日志中会出现错误&#xf…...

截止到目前全量主体总数有多少?

企业主体类型 企业主体类型有很多种&#xff0c;一般我们会分为公司&#xff08;有限责任&#xff09;、合伙企业、个人独资企业、个体经营户这些类别。 今天我们按照企业&#xff0c;个体&#xff0c;组织的分类方式来看各个主体的总数。 企业&#xff1a;统一社会信用代码…...

HTTP--Request详解

请求消息数据格式 请求行 请求方式 请求url 请求协议/版本 GET /login.html HTTP/1.1 请求头 客户端浏览器告诉服务器一些信息 请求头名称: 请求头值 常见的请求头&#xff1a; User-Agent&#xff1a;浏览器告诉服务器&#xff0c;我访问你使用的浏览器版本信息 可…...

Linux C++ 网络编程基础(2) : TCP多线程一个server对应多个client

目录 一、linux posix线程相关函数介绍二、tcp server基础版本三、tpc服务端多线程版本四、tpc客户端代码tcp编程时, 一个server可以对应多个client, server端用多线程可以实现. linux下多线程可以使用POSIX的线程函数, 下面给出服务端和客户端的代码. 一、linux posix线程相关…...

如何构建一个 NodeJS 影院微服务并使用 Docker 部署

文章目录 前言什么是微服务&#xff1f;构建电影目录微服务构建微服务从 NodeJS 连接到 MongoDB 数据库总结 前言 如何构建一个 NodeJS 影院微服务并使用 Docker 部署。在这个系列中&#xff0c;将构建一个 NodeJS 微服务&#xff0c;并使用 Docker Swarm 集群进行部署。 以下…...

BEVFusion(ICRA-2023)--01

说明&#xff1a;论文 BEVFusion: Multi-Task Multi-Sensor Fusion with Unified Bird’s-Eye View Representation 原代码运行记录 原始环境&#xff1a;python 3.9 torch 1.12 &#xff08;失败&#xff09; 报错&#xff1a; python setup.py develop/mmdet3d/ops/ball_qu…...

Java——Iterator迭代器

在程序开发中&#xff0c;经常需要遍历集合中的所有元素。针对这种需求&#xff0c;JDK专门提供了一个接口java.util.Iterator。Iterator接口也是Java集合中的一员&#xff0c;但它与Collection、Map接口有所不同&#xff0c;Collection接口与Map接口主要用于存储元素&#xff…...

GCC编译过程:预处理->编译->汇编->链接

目录 引言 概括介绍 一、预处理 二、编译 三、汇编 四、链接 总结 引言 当使用集成开发环境&#xff08;IDE&#xff09;进行C语言编程时&#xff0c;点击"编译"按钮后&#xff0c;整个C程序从源代码到可执行文件的生成过程会自动完成。IDE会在后台为我们执行C…...

JVM笔记 —— 出现内存溢出错误时时如何排查

一、出现内存溢出的几种情况 内存溢出错误分为StackOverflowError和OutOfMemoryError&#xff0c;前者是栈中出现溢出&#xff0c;后者一般是堆或方法区出现溢出&#xff0c;简称OOM 1. 栈溢出 StackOverflowError 栈溢出一般都是因为没有正确的结束递归导致的&#xff0c;无…...

多级嵌套引入组件导致Vue提示子组件未注册问题

发生此问题的时候是页面解析的时报错的&#xff0c; 所以可以放在beforeCreate中执行注册组件这个时候是在页面运行时执行的&#xff0c;运行时编译就结束了 第一种&#xff1a;可以在父组件中动态注册组件 export default{beforeCreate(){//require是commonJS,commonJS导入ES…...

vue3+element-plus组件下拉列表,数组数据转成树形数据

引入组件 可以直接在项目中引入element-plus表格组件&#xff0c;如果需要变成下拉列表样式需要添加以下属性&#xff1a; row-key 必填 最好给数字或唯一属性 &#xff0c; 给每个节点设置id 不填的话 没有办法实现展开效果 load 这个是动态添加数据的 前提&#xff08;开启…...

【kubernetes】调度约束

目录 调度约束 Pod 启动典型创建过程如下 调度过程 指定调度节点 查看详细事件&#xff08;发现未经过 scheduler 调度分配&#xff09; 获取标签帮助 需要获取 node 上的 NAME 名称 给对应的 node 设置标签分别为 ggls 和 gglm 查看标签 修改成 nodeSelector 调度方…...

【深度学习MOT】SMILEtrack SiMIlarity LEarning for Multiple Object Tracking,论文

论文&#xff1a;https://arxiv.org/abs/2211.08824 文章目录 AbstractIntroduction2. 相关工作2.1 基于检测的跟踪2.1.1 检测方法2.1.2 数据关联方法 2.2 基于注意力的跟踪 3. 方法3.1 架构概述3.2 用于重新识别的相似性学习模块&#xff08;SLM&#xff09; Experimental Res…...

jmeter通过BeanShell对接口参数进行MD5和HmacSHA256加密【杭州多测师_王sir】

一、在eclipse里面编写MD5加密算法 package com.Base64;import java.security.MessageDigest; import java.security.NoSuchAlgorithmException;public class Md5Utils {public static String md5(String sourceStr) {String result "";try {MessageDigest md Mess…...

基于自适应曲线阈值和非局部稀疏正则化的压缩感知图像复原研究【自适应曲线阈值去除加性稳态白/有色高斯噪声】(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

Spring AOP 切点表达式

参考博客&#xff1a; 参考博客...

打破传统直播,最新数字化升级3DVR全景直播

导语&#xff1a; 近年来&#xff0c;随着科技的不断创新和发展&#xff0c;传媒领域也正经历着一场前所未有的变革。在这个数字化时代&#xff0c;直播已经不再仅仅是在屏幕上看到一些人的视频&#xff0c;而是将观众带入一个真实世界的全新体验。其中&#xff0c;3DVR全景直…...

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源&#xff08;HTML/CSS/图片等&#xff09;&#xff0c;响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址&#xff0c;提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

React hook之useRef

React useRef 详解 useRef 是 React 提供的一个 Hook&#xff0c;用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途&#xff0c;下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一&#xff09; 1. CSI-2层定义&#xff08;CSI-2 Layer Definitions&#xff09; 分层结构 &#xff1a;CSI-2协议分为6层&#xff1a; 物理层&#xff08;PHY Layer&#xff09; &#xff1a; 定义电气特性、时钟机制和传输介质&#xff08;导线&#…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指&#xff1a;像函数调用/返回一样轻量地完成任务切换。 举例说明&#xff1a; 当你在程序中写一个函数调用&#xff1a; funcA() 然后 funcA 执行完后返回&…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...