[Python]使用Python操作MySQL数据库(pymysql)

请添加图片描述


前言

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



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()

在这里插入图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在IDEA中,当出现"ModuleNotFoundError: No module named 'pymysql'"的错误时,这意味着你的项目中缺少了pymysql模块。要解决这个问题,你可以按照以下步骤操作: 1. 确保你已经安装了pymysql模块。你可以使用命令"pip3 show PyMySQL"来检查是否已经安装了pymysql模块。 2. 如果pymysql模块没有安装,你可以使用命令"pip install pymysql"来安装它。 3. 检查你的项目中是否正确导入了pymysql模块。确保你在代码中正确地引入了pymysql模块,例如:"import pymysql"。 4. 如果你已经安装了pymysql模块并且正确导入了它,但仍然出现错误,那么可能是由于连接URL的问题导致的。你可以尝试在URL的端口号后面添加一些参数来解决连接问题。例如,在端口号后面添加"?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT+8&useSSL=false"这些参数。 5. 如果以上步骤都没有解决问题,请确保你的项目中没有其他与pymysql模块冲突的模块。你可以尝试卸载其他可能与之冲突的模块,然后重新安装pymysql模块。 总结起来,要解决IDEA中pymysql报错的问题,你可以按照以下步骤进行操作: 1. 确保你已经安装了pymysql模块。 2. 检查你的项目中是否正确导入了pymysql模块。 3. 如果已安装并正确导入了pymysql模块,但仍然出现错误,尝试在URL的端口号后面添加参数。 4. 如果问题仍然存在,请检查是否存在与pymysql模块冲突的其他模块,并尝试解决冲突的问题。 希望以上解答能够帮到你。如果还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值