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.rhkb.cn/news/205202.html

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

相关文章

【Python3】【力扣题】349. 两个数组的交集

【力扣题】题目描述: 【Python3】代码: 1、解题思路:集合的交集。两个数组都转为集合,获取集合的交集。 知识点:set(...):转为集合,集合的元素不重复。 集合1.intersection(集合2)&#xff1a…

ZYNQ_project:lcd_pic_400x400

在lcd液晶屏上显示400x400像素的图片, 像素信息通过电脑的串口调试助手,发送给fpga,存储在例化的双端口ram中, 在要显示图像区域,读取ram中的像素信息。 模块框图: 时序图: 代码:…

Windows下搭建Tomcat HTTP服务,发布公网远程访问

文章目录 前言1.本地Tomcat网页搭建1.1 Tomcat安装1.2 配置环境变量1.3 环境配置1.4 Tomcat运行测试1.5 Cpolar安装和注册 2.本地网页发布2.1.Cpolar云端设置2.2 Cpolar本地设置 3.公网访问测试4.结语 前言 Tomcat作为一个轻量级的服务器,不仅名字很有趣&#xff0…

C语言——数组转换

将的两行三列数组转换为三行两列的数组 #define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> int main() {int a[2][3]{{1,2,3},{4,5,6}};int b[3][2],i,j;for ( i 0; i <1; i){for ( j 0; j <2; j){printf("%5d",a[i][j]);b[j][i]a[i][j];}printf(&…

LTD253次升级 | 官网“活动“增报名 • 名片展示个人简介 • 合伙人设置个性邀请码

1、活动类型支持报名&#xff1b; 2、产品详情页支持房产类型产品的地图显示&#xff1b; 3、官微名片独立版支持个人简介&#xff1b; 4、多语言系统支持挪威语&#xff1b; 5、极速官微首页提速、合伙人页面优化&#xff1b; 6、 已知问题优化与修复&#xff1b; 01网站编辑器…

Mysql8.1.0 安装问题-缺少visual studio 2019x64组件

缺少visual studio x64组件的问题 使用Mysql8以上的安装包mysql-8.1.0-winx64.msi进行安装&#xff0c; 提示缺少visual studio 2019 x64可再发行组件 在微软官网下载vc可再发行程序包 Microsoft Visual C 可再发行程序包最新支持的下载 在Visual Studio 2015、2017、2019 和…

Arch Linux 安装 dwm 窗口管理器

窗口管理器是管理桌面上各种窗口的组件&#xff0c;主要功能有&#xff1a;窗口堆叠方式&#xff0c;窗口移动规则等。大多数人接触到的是堆叠式窗口管理器&#xff0c;一个窗口可以叠放在其他窗口之上&#xff0c;调整窗口的主要方式是鼠标。而dwm&#xff08;Dynamic Window …

【C++】异常处理 ① ( 异常概念引入 | 抛出异常语法 | 捕获异常语法 | 异常捕获流程 | 异常处理代码示例 )

文章目录 一、异常处理1、异常概念引入2、抛出异常语法3、捕获异常语法4、异常捕获流程 二、异常处理代码示例1、错误代码示例 - 抛出异常 / 不捕获异常2、正确代码示例 - 抛出异常 / 捕获异常3、正确代码示例 - 抛出异常 / 捕获异常不处理继续抛出异常 一、异常处理 1、异常概…

端口隔离度

端口隔离度 隔离度为&#xff08;本振或射频信号&#xff09;泄漏到其他端口的功率与输入功率之比&#xff0c;单位是dB。 比如 RF to LO Isolation 表示 射频输入信号的功率 与 泄漏到LO端口的功率 之比。 而 LO to RF Isolation 则表示 本振输入信号的功率 与 泄漏到RF端口的…

Cytoscape学习教程

写在前面 今天分享的内容是自己遇到问题后,咨询社群里面的同学,帮忙解决的总结。 关于Cytoscape,对于做组学或生物信息学的同学基本是陌生的,可能有的同学用这个软件作图是非常溜的,做出来的网络图也是十分的好看,“可玩性”很高,就像前面分享的aPEAR包一样aPEAR包绘制…

List操作的一些常见问题

文章目录 阿里巴巴开发手册强制规约&#xff1a;1. Arrays.asList转换基本类型数组2. Arrays.asList返回的List不支持增删操作3. 对原始数组的修改会影响到我们获得的那个List4. ArrayList.subList强转ArrayList导致异常5. ArrayList中的subList切片造成OOM6.Copy-On-Write 是什…

C语言——从键盘输人一个表示年份的整数,判断该年份是否为闰年,并显示判断结果。

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> int main() {int year 0;printf("请输入年份&#xff1a;");scanf("%d",&year);if((year%4 0) && (year%100!0) || (year%400 0)){printf("%d是闰年\n",year);}else{p…

QML Label 属性 pyside6

基本属性 text: 显示的文本内容 Label {text: "Hello, World!" }color: 文本颜色 Label {color: "blue" }font: 字体设置&#xff0c;包括 family、pointSize、weight 和 style Label {font.family: "Arial"font.pointSize: 20font.bold: tr…

set与map

set与map 一、序列式容器与关联式容器二、pair1、键值对2、作用3、构造函数4、make_pair&#xff08;1&#xff09;构造函数&#xff08;2&#xff09;作用 5、代码6、运行结果 三、set1、概念2、代码3、运行结果4、说明 四、multiset1、与set的关系2、代码3、运行结果 五、map…

【新手解答1】深入探索 C 语言:变量名、形参 + 主调函数、被调函数 + 类和对象 + 源文件(.c 文件)、头文件(.h 文件)+ 库

C语言的相关问题解答 写在最前面目录 问题1变量名与变量的关系与区别变量和数据类型形参&#xff08;形式参数&#xff09;的概念 问题2解析&#xff1a;主调函数和被调函数延伸解析&#xff1a;主调函数对于多文件程序的理解总结 问题3类和对象变量和数据类型变量是否为抽象的…

ArcGIS中基于人口数据计算人口密度的方法

文章目录 一、密度分析原理二、点密度分析三、线密度分析四、核密度分析一、密度分析原理 密度分析是指根据输入的要素数据集计算整个区域的数据聚集状况,从而产生一个联系的密度表面。通过密度计算,将每个采样点的值散步到整个研究区域,并获得输出栅格中每个像元的密度值。…

嵌入式八股 | 校招秋招 | 笔试面试 | 精选题目

欢迎关注微信公众号【赛博二哈】获取八股PDF 并加入嵌入式求职交流群。提供简历模板、学习路线、岗位整理等 欢迎加入知识星球【嵌入式求职星球】获取完整嵌入式八股。 提供简历修改、项目推荐、求职规划答疑。另有各城市、公司岗位、笔面难题、offer选择、薪资爆料等 嵌入式…

分布式数据恢复-hbase+hive分布式存储误删除如何恢复数据?

hbasehive分布式存储数据恢复环境&#xff1a; 16台某品牌R730XD服务器节点&#xff0c;每台物理服务器节点上有数台虚拟机&#xff0c;虚拟机上配置的分布式&#xff0c;上层部署hbase数据库hive数据仓库。 hbasehive分布式存储故障&初检&#xff1a; 数据库文件被误删除…

十八、初识elasticsearsh (索引)

目录 一、Elasticsearch的介绍&#xff1a; 二、正向索引和倒排索引 1、正向索引 2、倒排索引 3、索引(index) :相同类型的文档的集合 4、映射(mapping):索引中文档的字段约束信息&#xff0c;类似表的结构约束 一、Elasticsearch的介绍&#xff1a; Elasticsearch是一个…

企业数字化转型的作用是什么?_光点科技

在当今快速变化的商业环境中&#xff0c;数字化转型已成为企业发展的重要策略。企业数字化转型指的是利用数字技术改造传统业务模式和管理方式&#xff0c;以提升效率、增强竞争力和创造新的增长机会。 提升运营效率&#xff1a;数字化转型通过引入自动化工具和智能系统&#x…