python操作Mysql学习

文章目录

  • 版权声明
  • 准备:MYSQL数据库
    • 数据库简介
    • 数据库分类
    • 数据库管理系统
    • SQL语句
    • 关系型数据库中核心元素
    • MySQL环境搭建
    • Mysql数据类型
    • 数据完整性和约束
    • MYSql基本操作
    • 登录和退出数据库命令
    • 数据库基本操作命令
    • 数据表基本操作命令
    • 数据表结构修改命令
    • 表数据操作命令
    • Mysql查询
    • 视图
    • 事务
    • 数据库设计三范式
  • Python连接MySQL数据库
    • Python连接MySQL数据库
    • 演示
      • 演示sql库
      • 查询操作演示
      • 增删改操作演示
    • SQL注入
      • 语句参数化演示

版权声明

  • 本博客的内容基于我个人学习黑马程序员课程的学习笔记整理而成。我特此声明,所有版权属于黑马程序员或相关权利人所有。本博客的目的仅为个人学习和交流之用,并非商业用途。
  • 我在整理学习笔记的过程中尽力确保准确性,但无法保证内容的完整性和时效性。本博客的内容可能会随着时间的推移而过时或需要更新。
  • 若您是黑马程序员或相关权利人,如有任何侵犯版权的地方,请您及时联系我,我将立即予以删除或进行必要的修改。
  • 对于其他读者,请在阅读本博客内容时保持遵守相关法律法规和道德准则,谨慎参考,并自行承担因此产生的风险和责任。
  • 本博客中的部分观点和意见仅代表我个人,不代表黑马程序员的立场。

准备:MYSQL数据库

数据库简介

  • 数据库就是用户计算机上的一些具有特殊格式的数据文件的集合.

数据库的特点:

  • 持久化存储
  • 读写速度极高
  • 保证数据的有效性
  • 对程序支持性非常好,容易扩展

数据库分类

  • 关系型数据库
  • 非关系型数据库
    在这里插入图片描述
  • 关系数据库,是指采用了关系模型来组织数据的数据库,简单来说,关系模型指的就是二维表格模型
    在这里插入图片描述

  • 关系形数据库

  • MySQL采用了双授权政策,它分为社区版和商业版,由于其体积小、速度快、总体使用成本低,尤其是开源,一般中小型网站的开发都选择MySQL作为网站数据库。
    在这里插入图片描述

常见的关系型数据库:

  • oracle : 银行,电信等项目
  • ms sql server:在微软的项目中使用
  • sqlite:轻量级数据库,主要应用在移动平台
  • mysql:web时代使用最广泛的关系型数据库。

非关系型数据库

  • 非关系型数据库,又被称为NoSQL(Not Only SQL ),意为不仅仅是SQL,对NoSQL 最普遍的定义是“非关联型的”,强调Key-Value 的方式存储。
    在这里插入图片描述

数据库管理系统

  • 数据库管理系统( Database Management System,简称DBMS)是为管理数据库而设计的软件系统。包括三大部分构成。
    • 数据库文件集合:主要是一系列的数据文件,作用是存储数据。
    • 数据库服务器:主要负责对数据文件以及文件中的数据进行管理。
    • 数据库客户端:主要负责和服务端通信,向服务端传输数据或者从服务端获取数据。
      在这里插入图片描述

SQL语句

  • SQL(Structured Query Language)是结构化查询语言,是一种用来操作RDBMS的数据库语言。当前几乎所有关系型数据库都支持使用SQL语言进行操作,也就是说可以通过 SQL 操作 oracle,sql server,mysql,sqlite 等等所有的关系型的数据库。
  • Relational Database Management System ——关系型数据库管理系统RDBMS,是专门用来管理关系型数据库的系统.

关系型数据库中核心元素

在这里插入图片描述

MySQL环境搭建

  • centos7环境请参考

    • Centos7安装mysql
    • linux下安装MySQL上
    • linux下安装MySQL
  • Ubuntu20配置Mysql常用操作

  • 客户端建议使用Navicat,有关安装和使用教程推荐网络教程,不再赘述

Mysql数据类型

  • 数据类型详解【上】
  • 数据结构详解【下】

数据完整性和约束

  • 数据完整性是指数据库中存储的数据遵循预定义的规则和约束。它确保数据的准确性、一致性和有效性,并防止无效或不一致的数据进入数据库。

MySQL中实现数据完整性的常见方法:

  1. 主键约束(Primary Key Constraint):通过在表中定义一个唯一标识符字段作为主键,确保每条记录都具有唯一的标识。主键可以由一个或多个字段组成。这样可以防止插入重复的数据。

  2. 唯一约束(Unique Constraint):通过在表的字段上定义唯一约束,确保该字段中的值在整个表中是唯一的。与主键不同的是,唯一约束可以允许空值。

  3. 非空约束(Not Null Constraint):通过在表的字段上定义非空约束,确保该字段中的值不能为空。这样可以防止插入空值或缺失值。

  4. 外键约束(Foreign Key Constraint):通过在表之间建立关联,定义外键约束来维护数据之间的关系。外键约束要求参考表中的值必须存在于主表中的相关字段中。这样可以确保数据的一致性和引用完整性。

  5. 检查约束(Check Constraint):通过在表的字段上定义检查条件,限制该字段中的值必须满足指定的条件。这样可以确保数据的有效性和一致性。


  • 约束 是保证数据的完整性和一致性。把性别字段设置为default “保密”, 当不输入张三性别信息时,依然用”保密”保证张三信息的完整
    在这里插入图片描述
  • 约束可参阅约束详细讲解

MYSql基本操作

在这里插入图片描述

登录和退出数据库命令

命令作用
mysql -u用户名-p密码连接数据库
exit / quit / ctrl + d退出数据库
select version();查看版本信息
select now();查看时间

数据库基本操作命令

命令作用示例
show databases;查看所有数据库show databases;
select database();查看当前使用的数据库select database()
create database 数据库名 charset=utf8;创建数据库create database python charset=utf8;
use数据库名;使用数据库use python;
drop database 数据库名;删除数据库-慎重drop database python;

数据表基本操作命令

命令作用
show tables;查看当前数据库中所有表\
desc 表名;查看表结构
show create table;表名查看表的创建语句-详细过程

数据表结构修改命令

命令作用
mysal -u用户名 -p密码连接数据库
exit / quit / ctrl + d退出数据库
select version();查看版本信息
select now();查看时间

表数据操作命令

在这里插入图片描述

  • 修改查询数据
    在这里插入图片描述
  • 删除数据
    在这里插入图片描述

Mysql查询

  • 数据库基础篇

视图

  • 视图

事务

  • https://yuanyou.blog.csdn.net/article/details/124534629

数据库设计三范式

  • 数据库的设计规范【上】-1~3范式和反范式化
  • 范式:设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,
    各种范式呈递次规范,越高的范式数据库冗余越小。
  • 三范式:
    • 第一范式(1NF): 强调的是列的原子性,即列不能够再分成其他几列。
    • 第二范式(2NF): 满足 1NF,另外包含两部分内容,一是表必须有一个主键;二是非主键字段 必须完全依赖于主键,而不能只依赖于主键的一部分。
    • 第三范式(3NF): 满足 2NF,另外非主键列必须直接依赖于主键,不能存在传递依赖。即不能存在:非主键列 A 依赖于非主键列 B,非主键列 B 依赖于主键的情况。

Python连接MySQL数据库

Python连接MySQL数据库

  • pymysql使用步骤
  1. 安装PyMySQL库:

    sudo pip3 install pymysql
    
  2. 导入PyMySQL库:在Python脚本中导入PyMySQL库

    import pymysql
    
  3. 建立数据库连接:使用pymysql.connect()函数建立与MySQL数据库的连接。

    connection = pymysql.connect(host='localhost',user='your_username',password='your_password',database='your_database_name')
    
  4. 创建游标对象

    cursor = connection.cursor()
    
  5. 执行SQL语句:使用游标对象的execute()方法执行SQL语句。

    sql = "SELECT * FROM table_name"
    cursor.execute(sql)
    
  6. 获取结果:使用游标对象的fetchall()fetchone()方法获取执行SQL语句后的结果。

    • fetchall()返回所有结果,而fetchone()返回单条结果。
    results = cursor.fetchall()
    for row in results:print(row)
    
  7. 提交事务和关闭连接:在完成所有数据库操作后,需要提交事务以保存更改,并关闭数据库连接。

connection.commit()
connection.close()

演示

演示sql库

-- 创建 "京东" 数据库
create database jing_dong charset=utf8;-- 使用 "京东" 数据库
use jing_dong;-- 创建一个商品goods数据表
create table goods(id int unsigned primary key auto_increment not null,name varchar(150) not null,cate_name varchar(40) not null,brand_name varchar(40) not null,price decimal(10,3) not null default 0,is_show bit not null default 1,is_saleoff bit not null default 0
);-- 向goods表中插入数据insert into goods values(0,'r510vc 15.6英寸笔记本','笔记本','华硕','3399',default,default); 
insert into goods values(0,'y400n 14.0英寸笔记本电脑','笔记本','联想','4999',default,default);
insert into goods values(0,'g150th 15.6英寸游戏本','游戏本','雷神','8499',default,default); 
insert into goods values(0,'x550cc 15.6英寸笔记本','笔记本','华硕','2799',default,default); 
insert into goods values(0,'x240 超极本','超级本','联想','4880',default,default); 
insert into goods values(0,'u330p 13.3英寸超极本','超级本','联想','4299',default,default); 
insert into goods values(0,'svp13226scb 触控超极本','超级本','索尼','7999',default,default); 
insert into goods values(0,'ipad mini 7.9英寸平板电脑','平板电脑','苹果','1998',default,default);
insert into goods values(0,'ipad air 9.7英寸平板电脑','平板电脑','苹果','3388',default,default); 
insert into goods values(0,'ipad mini 配备 retina 显示屏','平板电脑','苹果','2788',default,default); 
insert into goods values(0,'ideacentre c340 20英寸一体电脑 ','台式机','联想','3499',default,default); 
insert into goods values(0,'vostro 3800-r1206 台式电脑','台式机','戴尔','2899',default,default); 
insert into goods values(0,'imac me086ch/a 21.5英寸一体电脑','台式机','苹果','9188',default,default); 
insert into goods values(0,'at7-7414lp 台式电脑 linux )','台式机','宏碁','3699',default,default); 
insert into goods values(0,'z220sff f4f06pa工作站','服务器/工作站','惠普','4288',default,default); 
insert into goods values(0,'poweredge ii服务器','服务器/工作站','戴尔','5388',default,default); 
insert into goods values(0,'mac pro专业级台式电脑','服务器/工作站','苹果','28888',default,default); 
insert into goods values(0,'hmz-t3w 头戴显示设备','笔记本配件','索尼','6999',default,default); 
insert into goods values(0,'商务双肩背包','笔记本配件','索尼','99',default,default); 
insert into goods values(0,'x3250 m4机架式服务器','服务器/工作站','ibm','6888',default,default); 
insert into goods values(0,'商务双肩背包','笔记本配件','索尼','99',default,default);

查询操作演示

# 导入pymysql包
import pymysql# 创建连接对象
conn = pymysql.connect(host="192.168.1.30", port=3306,user="root", password="mysql",database="jing_dong", charset="utf8")
# 获取游标对象
cs = conn.cursor()# pymysql完成数据的查询操作
sql = "select name from goods;"
cs.execute(sql)
content = cs.fetchone()print(content)
content = cs.fetchall()
print(content)# 关闭游标和连接
cs.close()
conn.close()

增删改操作演示

# 导入pymysql包
import pymysql# 创建连接对象
conn = pymysql.connect(host="192.168.1.30", port=3306, user="root", password="mysql", database="jing_dong", charset="utf8")
# 获取游标对象
cs = conn.cursor()# 增加数据
sql = "insert into goods values(0,'惠普战x 2023款 15.6英寸笔记本','笔记本','惠普','4999',default,default)"
cs.execute(sql)
# 删除数据
sql = "delete from goods where id=21"
cs.execute(sql)
# 修改数据
sql = "update goods set name='天选 15.6寸笔记本' where id=1;"
cs.execute(sql)# pymysql完成数据的查询操作
sql = "select * from goods;"
# for循环显示数据
cs.execute(sql)
content = cs.fetchall()
for i in content:print(i)# 提交操作
conn.commit()# 关闭游标和连接
cs.close()
conn.close()

SQL注入

在这里插入图片描述

  • SQL注入:用户提交带有恶意的数据与SQL语句进行字符串方式的拼接,从而影响了SQL语句的语义,最终产生数据泄露的现象。

在这里插入图片描述

避免SQL注入的常见方法:

  1. 使用参数化查询(Prepared Statements):参数化查询是使用占位符(如?%s)代替直接将用户输入嵌入到SQL查询语句中。数据库引擎会将用户输入作为参数处理,避免了注入攻击。大多数现代的数据库驱动程序和ORM框架都支持参数化查询。例如,在PyMySQL中可以使用参数化查询来避免SQL注入。

  2. 验证和过滤用户输入:对于接收用户输入的字段,进行输入验证和过滤是非常重要的。检查输入是否符合预期的格式、类型和范围,并拒绝包含可疑字符或特殊字符的输入。可以使用正则表达式或内置的字符串函数进行验证和过滤。

  3. 最小权限原则:在设置数据库用户权限时,确保每个应用程序只具有其所需的最低权限。避免使用超级用户或具有过多权限的账号来连接数据库。

  4. 不要将用户输入直接拼接到SQL查询中:避免将用户输入直接嵌入到SQL查询语句中,即使对于简单的查询也要谨慎处理。使用参数化查询或ORM框架可以更安全地构建和执行SQL查询。

  5. 定期更新和维护数据库软件:及时更新数据库引擎和相关软件补丁,以修复已知的安全漏洞。同时,密切关注数据库供应商和安全专家发布的安全通告和建议。

  6. 日志记录和监控:实施日志记录和监控机制,以便检测和识别潜在的SQL注入攻击。监视异常查询、错误日志和其他不寻常活动,并及时采取相应的措施。

语句参数化演示

# 导入pymysql包
import pymysql
import binascii# 创建连接对象
conn = pymysql.connect(host="192.168.1.30", port=3306, user="root", password="mysql", database="jing_dong", charset="utf8")
# 获取游标对象
cs = conn.cursor()# 获取用户输入
find_name = input("请输入您要查询的商品姓名: ")# 使用 with 语句自动管理资源
with cs as cursor:# 执行 SQL 查询sql = "SELECT * FROM goods WHERE name LIKE %s"cursor.execute(sql, (f"%{find_name}%",))  # 使用 f-string 格式化占位符的值# 获取结果results = cursor.fetchall()for row in results:# 处理 bit 类型数据readable_bit_data = binascii.hexlify(row[5]).decode('utf-8')# 输出结果print(row[0], row[1], row[2], row[3], row[4], readable_bit_data)# 关闭数据库连接(with 语句会自动处理关闭连接)

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

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

相关文章

PCIe学习必读——《PCI Express System Architecture》

PCI Express (peripheral component interconnect express) 简称 PCIe,是一种高速串行计算机扩展总线标准。是一种全双工总线,使用高速串行传送方式,能够支持更高的频率,连接的设备不再像 PCI 总线那样共享总线带宽。PCIe目前发布…

数据结构-二叉树(2)

3.4堆的应用 3.4.1 堆排序 堆排序即利用堆的思想来进行排序,总共分为两个步骤: 1. 建堆 1.升序:建大堆; 2.降序:建小堆。 2. 利用堆删除思想来进行排序 这种写法有两个缺点: 1、先有一个堆的数据结构 …

微信小程序 老年人心血管健康知识科普系统

本系统的功能有管理员:个人中心,用户管理,热点信息管理,疾病管理,疾病类型管理,治疗管理,治疗类型管理,护理管理,护理类型管理,科普管理,科普类型…

如何利用轮廓系数(Silhouette Coefficient)来判断模糊c均值聚类FCM的聚类簇数量

文章目录 前言一、轮廓系数的计算方法二、具体流程 前言 轮廓系数(Silhouette Coefficient)是一种评价聚类效果的指标,它可以用于判断模糊C均值聚类的聚类簇数量。 一、轮廓系数的计算方法 对于每个数据点i,计算它属于每个聚类…

lightdb-ignore_row_on_dupkey_index

LightDB 支持 ignore_row_on_dupkey_index hint LightDB 从23.4 开始支持oracle的 ignore_row_on_dupkey_index hint, 这个hint是用来忽略唯一键冲突的。类似与mysql的 insert ignore。 语法如下: 在LightDB中ignore_row_on_dupkey_index的效果等同于o…

深入了解HMAC加密技术:原理、应用与实践

一、引言 在网络安全领域,消息认证码(MAC)是一种重要的技术手段。Hash-based Message Authentication Code(HMAC)作为其中的一种,凭借其简单、高效、安全的特性,广泛应用于各种网络通信场景。本…

k8s中批量处理Pod应用的Job和CronJob控制器介绍

目录 一.Job控制器 1.简介 2.Jobs较完整解释 3.示例演示 4.注意:如上例的话,执行“kubectl delete -f myJob.yaml”就可以将job删掉 二.CronJob(简写为cj) 1.简介 2.CronJob较完整解释 3.案例演示 4.如上例的话&#xf…

工艺系统所管理数字化实践

摘要 本文介绍了上海核工程设计研究院在数字化转型方面的实践,包括业务数字化和管理数字化两个方面。业务数字化方面,该院通过开发小工具改进工作流程。管理数字化方面,该院采用零代码平台集中管理管道力学信息相关模型和数据,并…

JeeSpringCloud uploadFile.jsp 文件上传漏洞复现

0x01 产品简介 JeeSpringCloud是一款免费开源的JAVA互联网云快速开发平台,微服务分布式代码生成的敏捷开发系统架构,项目代码简洁、注释丰富、上手容易、还同时集中分布式、分布式事务、微服务,同时包含许多基础模块和监控、服务模块,JeeSpri…

RabbitMQ消息模型之Work Queues

Work Queues Work Queues,也被称为(Task Queues),任务模型,也是官网给出的第二个模型,使用的交换机类型是直连direct,也是默认的交换机类型。当消息处理比较耗时的时候,可能生产消息…

供应链 | “利刃出鞘”——顶刊POMS论文解读:制造商借助电子商务部门入侵

论文解读者:肖善,温梓曦,张怡雯,杨子豪 编者按: 解密品牌商在线电商平台:组织结构、策略选择、三方共赢 Manufacturer encroachment with an e‐commerce division 原文作者信息 Shi, S., Wang, C., Ch…

微信小程序上传报错TypeError: Failed to fetch

上传之后报message:TypeError: Failed to fetch这个错误。 关掉项目 > 选择项目的ide界面右上有个齿轮设置 > 代理

嵌入式设备与PC上位机通信协议设计的几点原则

嵌入式设备在运行中需要设置参数,这个工作经常由PC机来实现,需要为双方通信设计协议,有代表性协议是如下三种: 从上表可以看到,一般嵌入式设备内存和运算性能都有限,因此固定二进制是首选通信协议。 一&am…

【智能算法】改进粒子群优化算法及对比分析

程序名称:改进粒子群优化算法及对比分析 实现平台:matlab 代码简介:基本粒子群算法(BPSO)中,每个优化问题的解都可以看作粒子在搜索空间中的位置,粒子通过飞行速度决定它们的搜索方向和搜索范围,粒子群通…

磁环电感参数计算

磁环电感参数计算 1.什么是电感磁饱和2.电感饱和的原因3.电感饱和带来的影响3.1 感应电动势变化3.2 电感值变化3.3 功率损耗增加3.4 系统稳定性受到影响4.饱和电流计算最近在做DC/DC电源,电感是用磁环绕制的,所以关注一下磁环绕制电感参数的计算,学习学习。 某款磁环参数。 …

【Java安全】Java反射机制-成员变量的赋值与取值

文章目录 前言利用反射机制获取类的成员变量利用反射机制获取类的成员方法总结前言 Java反射(Reflection)是Java非常重要的动态特性,通过使用反射我们不仅可以获取到任何类的成员方法(Methods)、成员变量(Fields)、构造方法(Constructors)等信息,还可以动态创建Java类实例、…

【Python】实现一个简单的区块链系统

本文章利用 Python 实现一个简单的功能较为完善的区块链系统(包括区块链结构、账户、钱包、转账),采用的共识机制是 POW。 一、区块与区块链结构 Block.py import hashlib from datetime import datetimeclass Block:"""区…

Linux常用命令——ls 命令详解

文章目录 在Linux操作系统中,ls 命令是最常用且基础的命令之一。它用于列出目录内容,展示文件和目录的信息。本文将详细介绍ls 命令的各个参数及其含义,并通过实例演示它们的用法。 ls命令概述 ls 命令的基本格式为 ls [选项] [文件或目录]…

VirtualBox 7.0.8(虚拟机软件)

VirtualBox是一款开源的虚拟机软件,它是使用Qt编写,在Sun被Oracle收购后正式更名成Oracle VM VirtualBox。它可以在VirtualBox上安装并且执行Solaris、Windows、DOS、Linux、OS/2 Warp、BSD等系统作为客户端操作系统。使用者可以在VirtualBox上安装并且运…

stm32 计数模式

计数模式 但是对于通用定时器而言,计数器的计数模式不止向上计数这一种。上文基本定时器中计数器的计数模式都是向上计数的模式。 向上计数模式:计数器从0开始,向上自增,计到和自动重装寄存器的目标值相等时,计数器清…