自己做的网站如何盈利/百度扫一扫
Python操作mysql
在使用Python连接mysql之前我们需要先下载一个第三方的模块 pymysql的模块,导入后再进行操作。
操作步骤:1. 先连接mysql host,port,charset,username password 库,等等。
import pymysqlcoon = pymysql.connect(host='127.0.0.1',port=3306,user='root',passwd='12345',db='db10',charset='utf8',autocommit=True ) """coon = pymysql.connect(host='127.0.0.1', 本地ipport=3306, 端口user='root', 用户名passwd='12345', 密码db='db10'charset='utf8', 字符编码)"""
2.在Python中书写mysql语句
"""获取游标""" cur = coon.cursor()sql = 'select * from student'#写SQL语句affect_rows = cur.execute(sql)#代表影响的行数
3.执行SQL语句,拿到结果
fetchmany(3)就是前条数据
fetchall()所以信息
res = cur.fetchone() #使用fetchone()代表一个数 print(res) # (1, '男', 1, '理解')"""mysql> select * from student; +-----+--------+----------+-------+ | sid | gender | class_id | sname | +-----+--------+----------+-------+ | 1 | 男 | 1 | 理解 | | 2 | 女 | 1 | 钢蛋 | | 3 | 男 | 1 | 张三 | | 4 | 男 | 1 | 张一 | | 5 | 女 | 1 | 张二 |
4. 在Python中对数据的进一步处理
在游标这边加上cursor=pymysql.cursors.DictCursor让最终结果输出变为字典类型
cur = coon.cursor(cursor=pymysql.cursors.DictCursor)sql = 'select * from student'#写SQL语句affect_rows = cur.execute(sql) print(affect_rows) # #拿到结果res = cur.fetchone() print(res) # 加上之后变为字典类型 {'sid': 1, 'gender': '男', 'class_id': 1, 'sname': '理解'}
当我们在Python中修改数据后,那么在原来的数据库也会跟着修改
"""获取游标""" cur = coon.cursor(cursor=pymysql.cursors.DictCursor)sql = 'insert into teacher(tid, tname) values (6,"ll")'#输出结果为1 #当我们修改之后还要进行二次确认: coon.commit()#写SQL语句affect_rows = cur.execute(sql) print(affect_rows) #
添加二次确认 coon.commit(),之后就同步修改成功了
除了查询之外,都需要二次确认。
后续可以直接添加,只需要在开始的地方输入
autocommit=True
基于数据库写一个用户注册和登录功能(注册的数据保存在用户表中,然后根据这个用户名做登录)
1. 使用Navicat 来创建一个用户表:
2. 在python中使用sql语句来登录:
coon = pymysql.connect(host='127.0.0.1',port=3306,user='root',passwd='12345',db='db10',charset='utf8',autocommit=True
)# 游标
sor = coon.cursor(pymysql.cursors.DictCursor)# 写sql语句
ip_name = input('username')
ip_pwd = input('password')
sql1 = ''
sql = "select * from userinfo where username='%s' and password='%s'" % (ip_name, ip_pwd)add = sor.execute(sql)res = sor.fetchone()
if res:print('登录成功')
else:print('登录失败')
视图
什么是视图
MySQL中的视图是一个虚拟表,它根据 SELECT 语句的结果集生成。与物理表一样,视图包含一些列和行,但是这些列和行并不是真实存在的,而是基于 SELECT 语句所定义的查询结果。
为什么要使用视图
使用视图有以下优点:
- 可以简化复杂的查询,将多个表的数据组合在一起,提供新的查询界面,方便用户操作。
- 可以隐藏敏感数据,只向用户显示有限的数据。
- 可以在不修改底层表的结构的情况下,修改和更新数据。
如何使用视图
关键字:select view
select view 表名 as select * from teacher inner join course on teacher.tid = course.teacher_id;
这样就创建成功了
如何删除表
drop view (新建表名)
注意:在硬盘中,视图只有表结构,没有表数据文件,视图通常用于查询,尽量不要去修改。
在开发过程中,会不会去使用视图?
答:不会!视图是mysql的功能,如果你的项目里面大量的使用到了视图,那意味着你后期想要扩张某个功能的时候这个功能恰巧又需要对视图进行修改,意味着你需要先在mysql这边将视图先修改一下,然后再去应用程序中修改对应的sql语句,这就涉及到跨部门沟通的问题,所以通常不会使用视图,而是通过重新修改sql语句来扩展功能
触发器
什么是触发器
触发器(Trigger)是一种特殊的存储过程,可以在特定的数据库事件发生时(如插入、更新或删除数据)自动执行。触发器是通过设置一些触发条件来触发的,一旦触发条件满足,就会自动执行触发器所定义的操作。通常用于实现数据的约束性和完整性控制、数据同步、日志记录等功能。触发器可以在数据库中创建、修改和删除。
语法结构:
create trigger 触发器名称 before(之前)/after (之后)insert/update/delete on 表名 for each row
begin
sql语句
end
针对插入
针对插入
create trigger tri_after_insert_t1 after insert on 表名 for each row
begin
sql代码。。。
end
create trigger tri_after_insert_t2 before insert on 表名 for each row
begin
sql代码。。。
end
针对删除
针对删除
create trigger tri_after_delete_t1 after delete on 表名 for each row
begin
sql代码。。。
end
create trigger tri_after_delete_t2 before delete on 表名 for each row
begin
sql代码。。。
end
针对修改
针对修改
create trigger tri_after_update_t1 after update on 表名 for each row
begin
sql代码。。。
end
create trigger tri_after_update_t2 before update on 表名 for each row
begin
sql代码。。。
end
案例:
CREATE TABLE cmd (
id INT PRIMARY KEY auto_increment,
USER CHAR (32),
priv CHAR (10),
cmd CHAR (64),
sub_time datetime, #提交时间
success enum ('yes', 'no')0代表执行失败
);CREATE TABLE errlog (
id INT PRIMARY KEY auto_increment,
err_cmd CHAR (64),
err_time datetime
);delimiter $$ 将mysql默认的结束符由;换成$$
create trigger tri_after_insert_cmd after insert on cmd for each row
begin
if NEW.success = 'no' then # 新记录都会被MySQL封装成NEW对象
insert into errlog(err_cmd,err_time) values(NEW.cmd,NEW.sub_time);
end if;
end $$
delimiter ; 结束之后记得再改回来,不然后面结束符就都是$$了
往表cmd中插入记录,触发触发器,根据IF的条件决定是否插入错误日志
INSERT INTO cmd (
USER,
priv,
cmd,
sub_time,
success
)
VALUES
('egon','0755','ls -l /etc',NOW(),'yes'),
('egon','0755','cat /etc/passwd',NOW(),'no'),
('egon','0755','useradd xxx',NOW(),'no'),
('egon','0755','ps aux',NOW(),'yes');查询errlog表记录
select * from errlog;
删除触发器
drop trigger tri_after_insert_cmd;
事物
什么是事物:
开启一个事务可以包含一些sql语句,这些sql语句要么同时成功
要么一个都别想成功,称之为事务的原子性
事物的作用:
保证了数据操作的数据安全性
事物所拥有的四个属性
原子性(atomicity);一个事物是一个不可分割的工作单位,事物中包含了多个操作,要么都做,要么都不做。
一致性(consistency):事物必须是数据库中的一个一致性状态变成另一个一致性状态,一致性与原子性相关的
隔离性(isolation):一个事物的执行不能被其他事物所干扰,即一个事物内部操作级使用的数据,对并发的其他事物是隔开的,并发执行的各个事物之间,不能互相干扰。
持久性(durability):也被称为永久性(permanence )一个事物一旦提交,对于数据库的改变就是永久的,接下来的操作或故障不应该对其有所影响。
事物关键字:
start transaction;
commit;
rollback;
create table user(
id int primary key auto_increment,
name char(32),
balance int
);insert into user(name,balance)
values
('jason',1000),
('egon',1000),
('tank',1000);修改数据之前先开启事务操作
start transaction;修改操作
update user set balance=900 where name='jason'; 买支付100元
update user set balance=1010 where name='egon'; 中介拿走10元
update user set balance=1090 where name='tank'; 卖家拿到90元回滚到上一个状态
rollback;开启事务之后,只要没有执行commit操作,数据其实都没有真正刷新到硬盘
commit;
开启事务检测操作是否完整,不完整主动回滚到上一个状态,如果完整就应该执行commit操作站在python代码的角度,应该实现的伪代码逻辑,
try:
少了开事务...
update user set balance=900 where name='jason'; 买支付100元
update user set balance=1010 where name='egon'; 中介拿走10元
update user set balance=1090 where name='tank'; 卖家拿到90元
except 异常:
rollback;
else:
commit;
存储过程
基本使用:
delimiter $$
create procedure p1()
begin
select * from user;
end $$
delimiter ;调用
call p1()
创建存储过程
delimiter $$
create procedure p2(
in m int,in表示这个参数必须只能是传入不能被返回出去
in n int,
out res intout表示这个参数可以被返回出去
)begin
select tname from teacher where tid > m and tid < n;
set res=0;用来标志存储过程是否执行
end $$
delimiter ;
针对res需要先提前定义
set @res=10; 定义
select @res; 查看
call p1(1,5,@res) 调用
select @res 查看
函数
CREATE TABLE blog (
id INT PRIMARY KEY auto_increment,
NAME CHAR (32),
sub_time datetime
);INSERT INTO blog (NAME, sub_time)
VALUES
('第1篇','2015-03-01 11:31:21'),
('第2篇','2015-03-11 16:31:21'),
('第3篇','2016-07-01 10:21:31'),
('第4篇','2016-07-22 09:23:21'),
('第5篇','2016-07-23 10:11:11'),
('第6篇','2016-07-25 11:21:31'),
('第7篇','2017-03-01 15:33:21'),
('第8篇','2017-03-01 17:32:21'),
('第9篇','2017-03-01 18:31:21');
+----+--------------------------------------+---------------------+
| id | NAME | sub_time | month
+----+--------------------------------------+---------------------+
| 1 | 第1篇 | 2015-03-01 11:31:21 | 2015-03
| 2 | 第2篇 | 2015-03-11 16:31:21 | 2015-03
| 3 | 第3篇 | 2016-07-01 10:21:31 | 2016-07
| 4 | 第4篇 | 2016-07-22 09:23:21 | 2016-07
| 5 | 第5篇 | 2016-07-23 10:11:11 | 2016-07
| 6 | 第6篇 | 2016-07-25 11:21:31 | 2016-07
| 7 | 第7篇 | 2017-03-01 15:33:21 | 2017-03
| 8 | 第8篇 | 2017-03-01 17:32:21 | 2017-03
| 9 | 第9篇 | 2017-03-01 18:31:21 | 2017-03
+----+--------------------------------------+---------------------+select count(*) from blog group by month;
select date_format(sub_time,'%Y-%m'),count(id) from blog group by date_format(sub_time,'%Y-%m');
索引
我们知道数据都是存在硬盘上的,查询数据不可避免的使用IO操作
索引就是一种数据结构,类似于书的目录。意味着以后再查数据应该先找目录再找数据,而不是用翻页的方式查询数据
索引在MySQL中也叫做“键”,是存储引擎用于快速找到记录的一种数据结构。
primary key
unique key
index key
注意:上面三种key前两种除了有加速查询的效果之外还有额外的约束条件(primary key:非空且唯一,unique key:唯一),而index key没有任何约束功能只会帮你加速查询
相关文章:

MySQL数据库#6
Python操作mysql 在使用Python连接mysql之前我们需要先下载一个第三方的模块 pymysql的模块,导入后再进行操作。 操作步骤:1. 先连接mysql host,port,charset,username password 库,等等。 import pymysql…...

YOLO v1(2016.5)
文章目录 AbstractIntroduction过去方法存在的问题我们提出的方法解决了... Unified DetectionNetwork DesignTrainingInference Comparison to Other Detection SystemsDeformable parts modelsR-CNNOther Fast DetectorsDeep MultiBoxOverFeatMultiGrasp ExperimentsConclusi…...

SQL比较两次的字段集合,找出并返回差异,主要用于更新记录事件
Create PROCEDURE [dbo].[SysGetTableFieldsCompare] -- Description: <比较两次的字段集合,找出并返回差异,主要用于更新记录事件> -- Return 0- 成功, -1- 没有这个表 -- Rev: 1.00 -- FieldsSource Nvarchar(max) , FieldsTarg…...

muduo源码剖析之Acceptor监听类
简介 Acceptor类用于创建套接字,设置套接字选项,调用socket()->bind()->listen()->accept()函数,接受连接,然后调用TcpServer设置的connect事件的回调。 listen()//在TcpServer::start中调用 封装了一个listen fd相关…...

express session JWT JSON Web Token
了解 Session 认证的局限性 Session 认证机制需要配合 cookie 才能实现。由于 Cookie 默认不支持跨域访问,所以,当涉及到前端跨域请求后端接口的时候,需要做很多额外的配置,才能实现跨域 Session 认证。 注意: 当前端…...

负载均衡策略 LVS
一、集群功能分类 1、LB (1) 概念: LB:负载均衡 (Load Balancing) 是一种分发网络流量的技术,LB 负载均衡的基本原理是将传入的网络流量分发到多个后端服务器,以确保这些服务器都承担相似的工作负载,从而避免某一台…...

驱动开发6 IO多路复用——epoll
核心操作:一棵树、一张表、三个接口 相关案例 #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <stdlib.h> #include <string.h> #include <sys…...

【python学习笔记——列表】
1、列表定义 列表是写在方括号 [] 之间、用逗号分隔开的元素列表。 空列表 list[]非空列表 列表定义时例如list[‘csdn’, ‘is’ ,‘good’ ,2023],直接给列表内赋值 2、列表索引规则 列表名[start:stop:step],前闭后开,即取索引为start…...

TensorRT量化实战课YOLOv7量化:YOLOv7-PTQ量化(一)
目录 前言1. YOLOv7-PTQ量化流程2. 准备工作3. 插入QDQ节点3.1 自动插入QDQ节点3.2 手动插入QDQ节点 前言 手写 AI 推出的全新 TensorRT 模型量化实战课程,链接。记录下个人学习笔记,仅供自己参考。 该实战课程主要基于手写 AI 的 Latte 老师所出的 Tens…...

[微信小程序踩坑]微信小程序editor富文本组件渲染字符串时,内部图片超出大小导致无法正常渲染或回显(数据传输长度为 3458 KB,存在有性能问题!)
坑一:回显问题 富文本组件: <editor id"editor" name"{{name}}" style"font-size: 28rpx;color: #C9CDD4" read-only"{{true}}" placeholder"{{placeholder}}" bind:input"onChange11"…...

USACO12OPEN Balanced Cow Subsets G(meet in the middle)
洛谷P3067 [USACO12OPEN] Balanced Cow Subsets G 题目大意 我们定义一个奶牛集合 S S S是平衡的,当且仅当满足以下两个条件: S S S非空 S S S可以被划分为两个集合 A , B A,B A,B,满足 A A A里的奶牛产量之和等于 B B B里的牛奶产量之和 …...

GIT常用操作记录
1、后悔药:强制回退到某个具体历史提交记录,并强制推送到远程仓库 强制回退到某个具体历史提交记录,即要删除它之后的所有提交,可以用 git reset 命令。 首先找到目标提交记录的ID,可以在github远程仓库的历史提交记…...

【ETL工具】Datax-ETL-SqlServerToHDFS
🦄 个人主页——🎐个人主页 🎐✨🍁 🪁🍁🪁🍁🪁🍁🪁🍁 感谢点赞和关注 ,每天进步一点点!加油!&…...

Kubernetes (K8S)概述
1、K8S 是什么? K8S 的全称为 Kubernetes (K12345678S),PS:“嘛,写全称也太累了吧,不如整个缩写”。 1.1 作用 用于自动部署、扩展和管理“容器化(containerized)应用程序”的开源系统。 可以…...

11月14号|Move生态Meetup相约浪漫土耳其
Move是基于Rust编程语言,由Mysten Labs联合创始人兼CTO Sam Blackshear在Meta的Libra项目中开发而来,旨在为开发者提供比现有区块链语言更通用的开发语言。Sam的目标是创建Web3的JavaScript,即一种跨平台语言,使开发人员能够在多个…...

mac vim没有颜色 问题
vim ~/.vimrc syntax on set nu! set autoindent...

Servlet核心API
目录 HttpServlet init destory service 实例:处理get、post、put、delete请求 1.通过postman得到请求 2.通过ajax得到请求 HttpServletRequest 常见方法 前端给后端传参 1.GET,query string 2.POST,form 3.POST,json HttpSeverletRespons…...

crs 维护模式 exclusive mode
How To Validate ASM Instances And Diskgroups On A RAC Cluster (When CRS Does Not Start). (Doc ID 1609127.1)编辑To Bottom [rootrac1 ~]# ps -ef|grep grid root 2477 1 1 20:47 ? 00:00:51 /opt/oracle.ahf/jre/bin/java -server -Xms32m -Xmx64…...

【OpenCV实现平滑图像形态学变化】
文章目录 概要目标腐蚀膨胀开运算结构元素(内核)小结 概要 形态学变化是一组简单的图像操作,主要用于处理二值图像,即只包含黑和白两种颜色的图像。这些操作通常需要两个输入,原始图像和一个内核(kernel&a…...

Ubuntu服务器中java -jar 后台运行Spring Boot项目
问:我在我的服务器中java -jar 运行springboot项目,但是我操作不了命令了,必须要终止掉才能执行后面的操作,怎么样才能让他后台运行呢?比如我的jar包名是tools-boot-0.0.1-SNAPSHOT.jar 使用nohup命令: 在…...

微服务parent工程和子工程pom文件配置注意
parent工程 重要配置: <!-- 父工程 --><packaging>pom</packaging><!-- 聚合 --><modules><module>../base</module><module>../gateway</module><module>../user-service</module><mod…...

STM32G030F6P6点灯闪烁
前言 (1)如果有嵌入式企业需要招聘湖南区域日常实习生,任何区域的暑假Linux驱动实习岗位,可C站直接私聊,或者邮件:zhangyixu02gmail.com,此消息至2025年1月1日前均有效 (2࿰…...

K8s开发人员也需要了解的相关知识
工作变动总结一下之前的笔记,整理一个速查的东西,方便之后查阅 K8s开发相关 1、k8s yml apiverison: Kubernetes (k8s) 的 API 版本表示资源定义在 API 服务器中的稳定性和支持程度。API 版本由一个字符串表示,如 v1 或 apps/v1,…...

创建并启动华为HarmonyOS本地与远程模拟器及远程真机
1.打开设备管理器 2.选择要添加的手机设备,然后点击安装 3.正在下载华为手机模拟器 4.下载完成 5.创建新模拟器 下载系统镜像 点击下一步,创建模拟器 创建成功 启动模拟器 华为模拟器启动成功 6.登陆华为账号并使用远程模拟器 7.使用远程真机...

责任链模式应用案例
前几天系统商品折扣功能优化,同事采用了责任链模式重构了代码,现整理如下。 一、概念 责任链模式是为请求创建一个处理者对象的链条,所有处理者(除最末端)都含有下一个对象的引用从而形成一条处理链,该模…...

给你一个整数 num ,返回 num 中能整除 num 的数位的数目
给你一个整数 num ,返回 num 中能整除 num 的数位的数目。 如果满足 nums % val 0 ,则认为整数 val 可以整除 nums 。 示例 1: 输入:num 7 输出:1 解释:7 被自己整除,因此答案是 1 。 示例 2&…...

Java后端开发——房贷计算器(Ajax版、Json版、等额本息+等额本金)
MVC房贷计算器(Ajax版) 1.新建一个JavaWeb项目hslcalweb,设置tomcat10。 2.创建房贷计算器JavaBean:HslCalBean.java,增加以下的属性,并生成Getter/Setter方法。 private double total; //贷款额度pr…...

2023.10.28 关于 synchronized 原理
目录 synchronized 特性 synchronized 优化机制 锁升级(锁膨胀) 其他优化机制 锁消除 锁粗化 synchronized 特性 开始时是乐观锁,如果锁冲突频繁,就转为悲观锁开始是轻量级锁,如果锁被持有的时间较长,…...

力扣 27. 移除元素
目录 1.解题思路2.代码实现 1.解题思路 利用双指针思路,当让一个指针先走,指针指向的位置不等于val时,将此时该指针的值给另一个指针并且两个指针都加一,如果等于val,则让该指针加一继续走.最后另一个指针的下标就为排好的数组的…...

redis爆满导致数据丢失
记一则redis爆满导致数据丢失的一场事故 某功能上线后,发现出现问题,最后定位到了 redis. 由于存储的数据过多,导致阿里云4G大小的 redis 爆满,触发了回收策略。 于是临时扩容,运维同学当时未找到阿里云配置。 后面我用工具连接了…...