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.hqwc.cn/news/224971.html

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

相关文章

Stable Video Diffusion重磅发布:基于稳定扩散模型的AI生成视频

最近,stability.ai发布了稳定视频扩散,这是stability.ai第一个基于图像模型稳定扩散的生成视频基础模型。现在可以在研究预览中看到,这个最先进的生成人工智能视频模型代表着stability.ai在为每种类型的人创建模型的过程中迈出了重要的一步。…

uniapp挽留提示2.0

项目需求:有时候挽留的ui是全屏的,用page-container也可以。后来产品提了个问题,手机侧滑的时候没那么顺畅(就是一用侧滑,就显示出来,产品要的方案是如下图,emmm大概是这个意思) 后面…

去掉浏览器打开第三方应用确认弹框

问题 通过Chrome或Edge浏览器打开第三方应用时,每次都会出现确认弹框,比较烦 解决 首先你要知道应用的协议名称,比如我这里是hicode Windows搜索框搜索,打开注册表编辑器 手动添加 如下图,到Chrome对应目录&#x…

jsoup登录日志平台后调企业微信机器人自动发送错误日志告警

一、需求:错误日志Top10告警发送 二、需求分解 jsoup实现登录,获取到cookie和token等用户鉴权信息获取接口相应的key值调用日志平台错误日志Top榜接口,查询到结果集调用企业微信机器人发送消息接口加上定时任务,可以实现定时发送…

Web3.0时代:区块链DAPP将如何颠覆传统模式

小编介绍:10年专注商业模式设计及软件开发,擅长企业生态商业模式,商业零售会员增长裂变模式策划、商业闭环模式设计及方案落地;扶持10余个电商平台做到营收过千万,数百个平台达到百万会员,欢迎咨询。 随着…

CCC联盟数字车钥匙(四)——UWB MAC协议

本篇文章介绍CCC协议中关于UWB消息流,以及相关会话设置及控制消息的配置。 5、MAC协议 5.1 测距交换序列 本节介绍DK MAC层协议,针对双边双向测距方法(DS-TWR),协调器和Responder之间的数据交换方式。 图中关于SP0、…

解决git action发布报错:Input required and not supplied: upload_url

现象: 这个问题死活都找不到原因,后来打了一段调试的代码 - name: Debug Create Release Output run: | echo "Release ID: ${{ env.RELEASE_ID }}" echo "Release Upload URL: ${{ env.RELEASE_UPLOAD_URL }}" env: RELEASE_ID: ${…

统信UOS安装Virtualbox虚拟机和Windows10系统

在UOS统信系统中部署Windows环境我可以通过安装虚拟机来实现,这也可以解决软件不适配带来的一些问题,当然对硬件配置也有一定的要求,不建议性能过低的设备使用。 接下来请按照以下步骤进行安装Virtualbox及Win10虚拟系统的设置。 1、安装Vi…

深度学习【二】

1.运行时错误 1.1 ModuleNotFoundError: No module named ‘torch_scatter’ 参考 https://blog.csdn.net/weixin_42421914/article/details/132875571 pip install --no-index torch-scatter -f https://pytorch-geometric.com/whl/torch-1.13.1%2Bcpu.html

OSG粒子系统与阴影 - ​​​​​​​阴影shadow(7)

OSG阴影 在虚拟现实仿真中,为了真实地模拟自然效果,阴影效果是不可缺少的,它对一个场景的真实性是非常重要的。在游戏或仿真中,一个高效的阴影往往能够提供非常强悍的视觉真实感。 osgShadow库 在OSG中专门定义了一个名字空间osg…

lua的gc原理

lua垃圾回收(Garbage Collect)是lua中一个比较重要的部分。由于lua源码版本变迁,目前大多数有关这个方面的文章都还是基于lua5.1版本,有一定的滞后性。因此本文通过参考当前的5.3.4版本的Lua源码,希望对Lua的GC算法有一个较为详尽的探讨。 L…

【LeetCode】每日一题 2023_11_28 设计前中后队列(数组/链表/双端队列)

文章目录 刷题前唠嗑题目:设计前中后队列题目描述代码与解题思路偷看大佬题解 结语 刷题前唠嗑 LeetCode?启动!!! 这道题的难度,才是我想象中的中等题的难度好吧,昨天那玩意对我来说还是太难了…