Python初级之数据库基本操作以及防Sql注入【第八课】

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: MySql数据库操作首先在使用 PyMySQL 之前,我们需要确保 PyMySQL 已安装Python数据库操作环境配置离线安装:> pip install 下载的安装包名在线安装:输入以下命令> pip install pymysql

MySql数据库操作

首先在使用 PyMySQL 之前,我们需要确保 PyMySQL 已安装

Python数据库操作环境配置

离线安装:

pip install 下载的安装包名

在线安装:
输入以下命令

pip install pymysql

在这里插入图片描述
出现这样说明安装成功!

数据库操作的基本流程

在这里插入图片描述

创建 Connection数据库操作对象

使用Pymysql模块的connect() 方法可生成一个 connection 对象。
connect()参数如下:
• host: 数据库主机名.默认是用本地主机
• user: 数据库登陆名.默认是当前用户
• passwd: 数据库登陆的密码.默认为空
• db: 要使用的数据库名.没有默认值
• port: MySQL服务使用的TCP端口.默认是3306
• charset: 数据库编码
• local_infile: 是否允许读取本地文件

创建数据库

create database 数据库名

在这里插入图片描述

连接数据库

import pymysql

config = {'host': 'localhost',
'port': 3306,
'user': 'root',
'passwd': '密码',
'db' : '数据库名'
}
conn = pymysql.connect( ** config)

创建表

SQL语句:

CREATE TABLE 表名(ID INT NOT NULL AUTO_INCREMENT, name VARCHAR(20) NULL, age INT NULL, score INT NULL, PRIMARY KEY (ID));

使用connection 对象,常用方法:
cursor():创建游标对象。一个游标允许用户执行数据库命令和得到查询结果

          excute(sql[, args]):执行一个数据库查询或命令 
          callproc(func[,args]):调用一个存储过程
          fetchone():得到一行记录
          fetchall():得到所有行记录

close():关闭对象,关闭后无法再进行操作,除非再次创建连接。

cursor = conn.cursor()
sql = "CREATE TABLE tb_Student(ID INT NOT NULL
AUTO_INCREMENT, name VARCHAR(20) NULL, age INT NULL,
score INT NULL, PRIMARY KEY (ID))"
cursor.execute(sql)
conn.close()

将二维列表数据插入数据库

姓名 年龄 成绩
杨洋 18 90
张艺兴 19 92
彭昱畅 17 89

(1)将数据用多维列表方式存储在内存中

ls = []
ls.append(["杨洋",18,90])
ls.append(["张艺兴",19,92])
ls.append(["彭昱畅",17,89])

(2)写入数据库、读取数据内容

cursor = conn.cursor()
sql = "insert into tb_student(name,age,score) values('{0}',{1},{2})"
try:
  for line in ls:
      cursor.execute(sql.format(*line))
      conn.commit()
except:
      conn.rollback()
finally:
      conn.close()

读取数据库中数据

cursor = conn.cursor()
sql = "select * from tb_student"
cursor.execute(sql)
rows = cursor.fetchall()
ls =list(map(list,rows))
conn.close()
print(ls)

根据条件读取数据库的信息

cursor = conn.cursor()
sql = "select name,age,score from tb_student where score<{0}"
cursor.execute(sql.format(90))
rows = cursor.fetchall()
rows = list(map(list,rows))
print(rows)

修改数据库的信息

cursor = conn.cursor()
sql = "update tb_student set score = 80 where name=%s"
try:
   cursor.execute(sql,["杨洋"])
   conn.commit()
except:
   conn.rollback()

删除数据库的信息

cursor = conn.cursor()
sql = " delete from tb_student where score<%s "
try:
   cursor.execute(sql,[85])
   conn.commit()
except:
   conn.rollback()

SQL 防注入问题

所谓SQL注入,就是通过把SQL命令插入到Web表单提 交或输入域名或页面请求的查询字符串,最终达到欺骗 服务器执行恶意的SQL命令。

例子

user=“root”
password=“123456”

如果知道用户名和密码用以下语句登录验证:

user,pwd = "root","123456"
cursor = conn.cursor()
sql = "select * from tb_login where user = '{0}' and pwd ='{1}' "
cursor.execute(sql.format(user,pwd))
row = cursor.fetchone()
print(row)

肯定是登录验证成功!

但是如果我不知道用户名和密码呢?
我也可以用下面通过验证:

user = "suiyishu' or 1=1 --'"
pwd = "2846946"
cursor = conn.cursor()
sql = "select * from tb_login where user = '{0}' and pwd ='{1}' "
cursor.execute(sql.format(user,pwd))
row = cursor.fetchone()
print(row)

竟然也通过验证了!不可思议!
那到底为什么呢?
‘or 1=1’无论前面输入什么最终用户名验证都是True
'--'跳过密码验证

防Sql注入的方法:

1.带参数的Sql语句 : pymysql模块使用%s来实现

SQL语句参数化是解决SQL注入的最佳解决方案,在程序向数据库发送SQL执
行时,将SQL语句和参数分开传递,动态参数在SQL语句中使用占位符,在数
据库端在填入参数执行,即可规避SQL注入的问题,并提高了数据库执行效率。
• Python支持SQL参数化,动态参数用%s表示,cursor.execute()的第2个参数
位置进行SQL参数的传递,参数类型是tuple, list 或 dict。

user,pwd = "root","123456"
cursor = conn.cursor()
sql = "select * from tb_login where user = %s and pwd =%s "
cursor.execute(sql,(user,pwd))
row = cursor.fetchone()
print(row)

2.使用存储过程

存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外
部程序调用的一种数据库对象。
• 存储过程是为了完成特定功能的SQL语句集,经编译创建并保存在数据库
中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。
• 存储过程就是数据库 SQL 语言层面的代码封装与重用。
在stdDB数据库中创建一个存储过程p_login,如下:
CREATE PROCEDURE FindAllStu ( In p_stdID varchar(20))
BEGIN
Select * from StudentInfo where stdID = p_stdID ;
END
PyMysql模块调用存储过程:
cursor.callproc(func[,args]):调用一个存储过程

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1月前
|
SQL 缓存 监控
大厂面试高频:4 大性能优化策略(数据库、SQL、JVM等)
本文详细解析了数据库、缓存、异步处理和Web性能优化四大策略,系统性能优化必知必备,大厂面试高频。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:4 大性能优化策略(数据库、SQL、JVM等)
|
13天前
|
SQL 关系型数据库 MySQL
MySQL导入.sql文件后数据库乱码问题
本文分析了导入.sql文件后数据库备注出现乱码的原因,包括字符集不匹配、备注内容编码问题及MySQL版本或配置问题,并提供了详细的解决步骤,如检查和统一字符集设置、修改客户端连接方式、检查MySQL配置等,确保导入过程顺利。
|
11天前
|
SQL 监控 安全
SQL Servers审核提高数据库安全性
SQL Server审核是一种追踪和审查SQL Server上所有活动的机制,旨在检测潜在威胁和漏洞,监控服务器设置的更改。审核日志记录安全问题和数据泄露的详细信息,帮助管理员追踪数据库中的特定活动,确保数据安全和合规性。SQL Server审核分为服务器级和数据库级,涵盖登录、配置变更和数据操作等事件。审核工具如EventLog Analyzer提供实时监控和即时告警,帮助快速响应安全事件。
|
22天前
|
SQL 关系型数据库 MySQL
体验使用DAS实现数据库SQL优化,完成任务可得羊羔绒加厚坐垫!
本实验介绍如何通过数据库自治服务DAS对RDS MySQL高可用实例进行SQL优化,包含购买RDS实例并创建数据库、数据导入、生成并优化慢SQL、执行优化后的SQL语句等实验步骤。完成任务,即可领取羊羔绒加厚坐垫,限量500个,先到先得。
130 11
|
19天前
|
SQL 存储 BI
gbase 8a 数据库 SQL合并类优化——不同数据统计周期合并为一条SQL语句
gbase 8a 数据库 SQL合并类优化——不同数据统计周期合并为一条SQL语句
|
19天前
|
SQL 数据库
gbase 8a 数据库 SQL优化案例-关联顺序优化
gbase 8a 数据库 SQL优化案例-关联顺序优化
|
24天前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第16天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括配置系统源、安装 SQL Server 2019 软件包以及数据库初始化,确保 SQL Server 正常运行。
|
26天前
|
数据库连接 Go 数据库
Go语言中的错误注入与防御编程。错误注入通过模拟网络故障、数据库错误等,测试系统稳定性
本文探讨了Go语言中的错误注入与防御编程。错误注入通过模拟网络故障、数据库错误等,测试系统稳定性;防御编程则强调在编码时考虑各种错误情况,确保程序健壮性。文章详细介绍了这两种技术在Go语言中的实现方法及其重要性,旨在提升软件质量和可靠性。
26 1
|
1月前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第8天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括系统准备、配置安装源、安装 SQL Server 软件包、运行安装程序、初始化数据库以及配置远程连接。通过这些步骤,您可以顺利地在 CentOS 系统上部署和使用 SQL Server 2019。
|
1月前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第7天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括系统要求检查与准备、配置安装源、安装 SQL Server 2019、配置 SQL Server 以及数据库初始化(可选)。通过这些步骤,你可以成功安装并初步配置 SQL Server 2019,进行简单的数据库操作。