python操作Mysql学习

news2024/11/17 7:22:39

文章目录

  • 版权声明
  • 准备: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.coloradmin.cn/o/1262021.html

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

相关文章

Programming Abstractions in C阅读笔记:p197-p201

《Programming Abstractions in C》学习第64天,p196-p201总结。 一、技术总结 很难,唯有继续往下看才能让其变容易。 二、英语总结 1.psychologically是什么意思? 答: (1))psychology > psychological > psychologica…

filebeat日志收集工具

elk:filebeat日志收集工具和logstash相同 filebeat是一个轻量级的日志收集工具,所使用的系统资源比logstash部署和启动时使用的资源要小得多 filebeat可以运行在非Java环境,它可以代理logstash在非Java环境上收集日志 filebeat无法实现数据的过滤&…

Spring Security 6.x 系列(6)—— 显式设置和修改登录态信息

一、前言 此篇是对上篇 Spring Security 6.x 系列(5)—— Servlet 认证体系结构介绍 中4.9章节显式调用SecurityContextRepository#saveContext进行详解分析。 二、设置和修改登录态 2.1 登录态存储形式 使用Spring Security框架,认证成功…

Django回顾【一】

一、Web应用程序 Web应用程序是一种可以通过Web访问的应用程序&#xff0c;程序的最大好处是用户很容易访问应用程序&#xff0c;用户只需要有浏览器即可&#xff0c;不需要再安装其他软件。应用程序有两种模式C/S、B/S。 C/S&#xff1a;客户端<----->服务端 例如My…

第二十章,多线程

创建线程 有两种方式&#xff0c;分别为继承Java.lang.Thread类与实现Java.lang.Runnable接口 继承Thread类 Thread常用的两个构造方法语法 public Thread&#xff08;&#xff09;&#xff1b; public Thread&#xff08;String threadName&#xff09;&#xff1b; 继承…

揭秘Java三宝:final,static,volatile,面试中不可不知的关键字秘籍!

大家好&#xff0c;我是小米&#xff0c;一名热爱技术分享的程序员。最近在和小伙伴们聊天时&#xff0c;发现有不少小伙伴对于Java中的一些关键字&#xff0c;比如final&#xff0c;static&#xff0c;volatile等&#xff0c;还是感到有些懵懂。为了帮助大家更好地理解这些概念…

企业如何选择安全又快速的大文件传输平台

在现代信息化社会&#xff0c;数据已经成为各个行业的重要资源&#xff0c;而数据的传输和交换则是数据价值的体现。在很多场合&#xff0c;企业需要传输或接收大文件&#xff0c;例如设计图纸、视频素材、软件开发包、数据库备份等。这些文件的大小通常在几百兆字节到几十个字…

HashMap的实现原理

1.HashMap实现原理 HashMap的数据结构&#xff1a; *底层使用hash表数据结构&#xff0c;即数组链表红黑树 当我们往HashMap中put元素时&#xff0c;利用key的hashCode重新hash计算出当前对象的元素在数组中的下标 存储时&#xff0c;如果出现hash值相同的key&#xff0c;此时…

HarmonyOS-Service服务开发(一)

文章目录 创建新项目启动Serviceets获取service的bundleName DataAbility开发指导开发Data步骤创建Data 创建新项目 ServiceAbility开发指导 在config.json中也有配置出现 启动Service ets获取service的bundleName 项目的bundleName service的bundleName 这里serviceAbil…

模板上新|2023年10月DataEase模板市场上新动态

DataEase开源数据可视化分析平台于2022年6月正式发布模板市场&#xff08;https://dataease.io/templates/&#xff09;。模板市场旨在为DataEase用户提供专业、美观、拿来即用的仪表板模板&#xff0c;方便用户根据自身的业务需求和使用场景选择对应的仪表板模板&#xff0c;并…

easyExcel自定义导出,指定列,设置请求头背景色,加入合计行,设置合计行字体,背景色等等

效果图 1.引入easyExcel pom <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.3.1</version></dependency> 2.工具类-自定义样式handler-CustomCellWriteHandler import java.util…

skywalking告警UI界面有告警信息,webhook接口没有回调,400错误

400错误就是回调接口返回数据的属性对应不上 PostMapping(“/webhook”) public void webhook(RequestBody List alarmMessageList) 自定义的实体类AlarmMessage有问题 只能去官网找了 告警实体类官网 Getter EqualsAndHashCode RequiredArgsConstructor NoArgsConstructor(fo…

数据库基础入门 — 关联查询

我是南城余&#xff01;阿里云开发者平台专家博士证书获得者&#xff01; 欢迎关注我的博客&#xff01;一同成长&#xff01; 一名从事运维开发的worker&#xff0c;记录分享学习。 专注于AI&#xff0c;运维开发&#xff0c;windows Linux 系统领域的分享&#xff01; 本…

GAN:DCGAN-深度卷积生成对抗网络

论文&#xff1a;https://arxiv.org/pdf/1511.06434.pdf 发表&#xff1a;ICLR 2016 一、架构创新 1&#xff1a;全卷积网络&#xff1a;用逐步卷积代替确定性的空间池化函数&#xff08;如maxpooling&#xff09;&#xff0c;使网络学习自己的空间下采样。使用这种方法&#…

京东大数据(京东运营数据采集):2023年10月京东牛奶乳品行业品牌销售排行榜

鲸参谋监测的京东平台10月份牛奶乳品市场销售数据已出炉&#xff01; 10月份&#xff0c;牛奶乳品整体销售上涨。鲸参谋数据显示&#xff0c;今年10月&#xff0c;京东平台上牛奶乳品的销量将近1700万&#xff0c;同比增长1%&#xff1b;销售额将近17亿&#xff0c;同比增长约5…

双通道 12V 直流电机驱动芯片GC8548,可替代LV8548/LV8549/ONSEMI,内置 LDO,不需要逻辑电源,输入 兼容 3.3V 与 5V

GC8548 是一款双通道 12V 直流电机驱动芯 片&#xff0c;为摄像机、消费类产品、玩具和其他低压或 者电池供电的运动控制类应用提供了集成的电机 驱动解决方案。芯片一般用来驱动两个直流电机 或者驱动一个步进电机。 它可以工作在 3.8~12V 的电源电压上&#xff0c; 每通道能提…

如何通过内网穿透实现公网远程ssh连接kali系统

文章目录 1. 启动kali ssh 服务2. kali 安装cpolar 内网穿透3. 配置kali ssh公网地址4. 远程连接5. 固定连接SSH公网地址6. SSH固定地址连接测试 简单几步通过[cpolar 内网穿透](cpolar官网-安全的内网穿透工具 | 无需公网ip | 远程访问 | 搭建网站)软件实现ssh远程连接kali 1…

中小型公司如何搭建运维平台,rancher、kubersphere、rainbond

很多开发人员应该是了解过运维发布相关的平台或实际操作过应用发布&#xff0c;但又通常不是十分熟悉。在一个初创公司&#xff0c;或者没有成熟的运维发布平台的公司&#xff0c;如果让你来搭建一套发布平台&#xff0c;你应该如何去抉择呢&#xff1f; 这里我简单介绍几种。…

“大型”基础模型中幻觉的调查

Abstract 基础模型 (FM) 中的幻觉是指生成偏离事实或包含捏造信息的内容。这篇调查论文广泛概述了近期旨在识别、阐明和解决幻觉问题的努力&#xff0c;特别关注“大型”基础模型&#xff08;LFM&#xff09;。该论文对LFM特有的各种类型的幻觉现象进行了分类&#xff0c;并建…

Mybatis 源码搭建

文章目录 源码下载测试模块搭建学习博客 源码下载 首先下载mybatis-parent的源码&#xff1a;gitee地址 > https://gitee.com/callback_lab/mybatis-parent.git 然后下载mybatis的源码&#xff1a;gitee地址 > https://gitee.com/callback_lab/mybatis-src.git 带中文…