我是靠谱客的博主 粗犷荷花,最近开发中收集的这篇文章主要介绍[Python]使用Python操作MySQL数据库(pymysql)前言1. 安装与卸载pymysql第三方包2. pymysql的使用3. 使用 Python 操作 MySQL4. 防止SQL注入,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

请添加图片描述


前言

系列文章目录
[Python]目录
视频及资料和课件
链接:https://pan.baidu.com/s/1LCv_qyWslwB-MYw56fjbDg?pwd=1234
提取码:1234


文章目录

  • 前言
  • 1. 安装与卸载pymysql第三方包
    • 1.1 安装pymysql第三方包
    • 1.2 卸载pymysql第三方包
    • 1.3 查看已经安装的第三方包
    • 1.4 查看指定的已经安装的第三方包的信息
  • 2. pymysql的使用
    • 2.1 导入 pymysql 包
    • 2.2 使用 Python 操作数据库的步骤
    • 2.3 创建连接数据库的连接对象
    • 2.4 提交事物
    • 2.5 回滚事物
    • 2.6 关闭与数据库的连接
    • 2.7 获取执行sql语句的游标对象
      • 2.7.1 获取游标对象
      • 2.7.2 游标操作说明
    • 2.8 Python 操作 MySQL 图解
  • 3. 使用 Python 操作 MySQL
    • 3.1 pymysql完成数据的查询操作
    • 3.2 pymysql完成对数据的增加
    • 3.3 pymysql完成对数据的修改
    • 3.4 pymysql完成对数据的删除
  • 4. 防止SQL注入
    • 4.1 SQL注入
    • 4.2 防止SQL注入


1. 安装与卸载pymysql第三方包

安装python第三方包国内镜像网址

1.1 安装pymysql第三方包

pip install pymysql

在这里插入图片描述

1.2 卸载pymysql第三方包

pip uninstall pymysql

在这里插入图片描述

1.3 查看已经安装的第三方包

pip list

在这里插入图片描述

1.4 查看指定的已经安装的第三方包的信息

pip show pymysql

在这里插入图片描述

2. pymysql的使用

2.1 导入 pymysql 包

import pymysql

2.2 使用 Python 操作数据库的步骤

  1. 创建连接数据库的连接对象
  2. 通过连接对象获取执行sql语句的游标对象
  3. 根据任务需求组织sql语句
  4. 使用游标对象执行sql语句(如果是对数据库进行增加、删除、修改,如果成功需要进行事务的提交,失败需要进行事务的回滚;如果是对数据库进行查询操作,可以通过游标对象获取查询的结果)
  5. 关闭游标
  6. 关闭与数据库的连接

2.3 创建连接数据库的连接对象

调用pymysql模块中的connect()函数来创建连接对象.

conn = pymysql.connect(参数列表)

# 参数说明:
# host:连接的mysql主机的ip地址,如果本机是'localhost'
# port:连接的mysql主机的端口,默认是3306
# user:连接的用户名
# password:连接的密码
# database:数据库的名称
# charset:通信采用的编码方式,推荐使用utf8

2.4 提交事物

连接对象.commit()

表示将修改操作提交到数据库。

2.5 回滚事物

连接对象.rollback()

如果对数据库的修改操作失败,调用该函数,表示回滚数据,撤销对数据的修改。

2.6 关闭与数据库的连接

连接对象.close()

2.7 获取执行sql语句的游标对象

获取游标对象的目标就是要执行sql语句,完成对数据库的增、删、改、查操作。

2.7.1 获取游标对象

 # 调用连接对象的cursor()方法获取游标对象   
 cur = 连接对象.cursor()

2.7.2 游标操作说明

  1. 使用游标执行SQL语句: cur.execute(operation [parameters ]) 执行SQL语句,返回受影响的行数,主要用于执行insert、update、delete、select等语句
  2. 获取查询结果集中的一条数据: cur.fetchone() 返回一个元组, 如 (1,‘张三’)
  3. 获取查询结果集中的所有数据: cur.fetchall()返回一个元组,如((1,‘张三’),(2,‘李四’))
  4. 关闭游标: cur.close(),表示和数据库操作完成

2.8 Python 操作 MySQL 图解

在这里插入图片描述

3. 使用 Python 操作 MySQL

3.1 pymysql完成数据的查询操作

import pymysql


# 获取连接对象
conn = pymysql.connect(
    host='localhost',
    port=3306,
    user='root',
    password='',
    database='atguigudb',
    charset='utf8'
)

# 获取游标对象
cur = conn.cursor()

# 查询数据库的sql语句
sql = 'select * from `order`'

# 使用游标对象执行sql语句
# 并获取执行sql语句影响的行数
row_count = cur.execute(sql)
print(row_count)

# 通过游标对象获取查询的第一行结果
# res = cur.fetchone()
# print(res)

# 通过游标对象获取全部的查询结果
res = cur.fetchall()
for i in res:
    print(i)

# 关闭游标
cur.close()

# 关闭连接
conn.close()

在这里插入图片描述
在这里插入图片描述

3.2 pymysql完成对数据的增加

import pymysql


# 获取连接对象
conn = pymysql.connect(
    host='localhost',
    port=3306,
    user='root',
    password='',
    database='atguigudb',
    charset='utf8'
)

# 获取游标对象
cur = conn.cursor()

# 查询数据库的sql语句
sql = "insert into `order` values(4, 'abc')"

# 使用游标对象执行sql语句
# 并获取执行sql语句影响的行数
# 由于修改数据可能会报错,所以需要进行异常的捕获
try:
    row_count = cur.execute(sql)
    print(row_count)
    if row_count >= 1:
        print('对数据进行修改成功')
    # 提交数据的修改
    conn.commit()
except Exception as e:
    # 如果对数据修改出现异常,则回滚数据,撤销修改
    conn.rollback()

# 关闭游标
cur.close()

# 关闭连接
conn.close()

在这里插入图片描述
在这里插入图片描述

3.3 pymysql完成对数据的修改

import pymysql


# 获取连接对象
conn = pymysql.connect(
    host='localhost',
    port=3306,
    user='root',
    password='',
    database='atguigudb',
    charset='utf8'
)

# 获取游标对象
cur = conn.cursor()

# 查询数据库的sql语句
sql = "update `order` set order_name='aaa' where order_id=4;"

# 使用游标对象执行sql语句
# 并获取执行sql语句影响的行数
# 由于修改数据可能会报错,所以需要进行异常的捕获
try:
    row_count = cur.execute(sql)
    print(row_count)
    if row_count >= 1:
        print('对数据进行修改成功')
    # 提交数据的修改
    conn.commit()
except Exception as e:
    # 如果对数据修改出现异常,则回滚数据,撤销修改
    conn.rollback()

# 关闭游标
cur.close()

# 关闭连接
conn.close()

在这里插入图片描述
在这里插入图片描述

3.4 pymysql完成对数据的删除

import pymysql


# 获取连接对象
conn = pymysql.connect(
    host='localhost',
    port=3306,
    user='root',
    password='',
    database='atguigudb',
    charset='utf8'
)

# 获取游标对象
cur = conn.cursor()

# 查询数据库的sql语句
sql = "delete from `order` where order_id=4;"

# 使用游标对象执行sql语句
# 并获取执行sql语句影响的行数
# 由于修改数据可能会报错,所以需要进行异常的捕获
try:
    row_count = cur.execute(sql)
    print(row_count)
    if row_count >= 1:
        print('对数据进行修改成功')
    # 提交数据的修改
    conn.commit()
except Exception as e:
    # 如果对数据修改出现异常,则回滚数据,撤销修改
    conn.rollback()

# 关闭游标
cur.close()

# 关闭连接
conn.close()

在这里插入图片描述
在这里插入图片描述

4. 防止SQL注入

4.1 SQL注入

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

假如我们只要查询order表中order_id为1的数据,但是提交了带有恶意的数据与SQL语句进行字符串拼接,最终查询出了order表中的所有结果,这就是SQL注入。

import pymysql


# 获取连接对象
conn = pymysql.connect(
    host='localhost',
    port=3306,
    user='root',
    password='',
    database='atguigudb',
    charset='utf8'
)

# 获取游标对象
cur = conn.cursor()

# 查询数据库的sql语句
sql = "select * from `order` where order_id='%s';" %"1' or 1=1 or '1"
print('sql:', sql)

# 使用游标对象执行sql语句
# 并获取执行sql语句影响的行数
row_count = cur.execute(sql)
print(row_count)

for i in cur.fetchall():
    print(i)

# 关闭游标
cur.close()

# 关闭连接
conn.close()

在这里插入图片描述

sql: select * from order where order_id='1' or 1=1 or '1';,在这个sql中无论需要的查询条件是什么,拼接后的sql语句的where条件由于1=1一定会成立,一定会查询出表中全部的结果。

4.2 防止SQL注入

SQL语句参数化:
(1)SQL语言中的参数使用%s来占位,此处不是python中的字符串格式化操作
(2)将SQL语句中%s占位所需要的参数存在一个列表中,把参数列表传递给execute方法中第二个参数

execute方法中将要执行的sql语句的 %s 占位不需要带引号
第二个参数的数据类型可以是列表、元组。

import pymysql


# 获取连接对象
conn = pymysql.connect(
    host='localhost',
    port=3306,
    user='root',
    password='',
    database='atguigudb',
    charset='utf8'
)

# 获取游标对象
cur = conn.cursor()

# 查询数据库的sql语句
sql = "select * from `order` where order_id=%s;"

# sql语句中需要的参数
params = (1,)

# 使用游标对象执行sql语句
# 并获取执行sql语句影响的行数
row_count = cur.execute(sql, params)
print(row_count)

for i in cur.fetchall():
    print(i)

# 关闭游标
cur.close()

# 关闭连接
conn.close()

在这里插入图片描述

尝试SQL注入:

import pymysql


# 获取连接对象
conn = pymysql.connect(
    host='localhost',
    port=3306,
    user='root',
    password='',
    database='atguigudb',
    charset='utf8'
)

# 获取游标对象
cur = conn.cursor()

# 查询数据库的sql语句
sql = "select * from `order` where order_id=%s;"

# sql语句中需要的参数
params = ("1' or 1=1 or '1",)

# 使用游标对象执行sql语句
# 并获取执行sql语句影响的行数
row_count = cur.execute(sql, params)
print(row_count)

for i in cur.fetchall():
    print(i)

# 关闭游标
cur.close()

# 关闭连接
conn.close()

在这里插入图片描述

最后

以上就是粗犷荷花为你收集整理的[Python]使用Python操作MySQL数据库(pymysql)前言1. 安装与卸载pymysql第三方包2. pymysql的使用3. 使用 Python 操作 MySQL4. 防止SQL注入的全部内容,希望文章能够帮你解决[Python]使用Python操作MySQL数据库(pymysql)前言1. 安装与卸载pymysql第三方包2. pymysql的使用3. 使用 Python 操作 MySQL4. 防止SQL注入所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部