目录

一:python操作MySQL

1.python如何操作MySQL?
为了使python连接上数据库,你需要一个驱动,这个驱动是用于与数据库交互的库。

PyMySQL : 这是一个使Python连接到MySQL的库,它是一个纯Python库(文件夹)。

PyMySQL 是一个纯 Python 实现的 MySQL 客户端操作库,支持事务、存取过程、批量执行,实现增删改查等。

2.什么是 PyMySQL?
PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2 中则使用 mysqldb。

PyMySQL 遵循 Python 数据库 API v2.0 规范,并包含了 pure-Python MySQL 客户端库。

二:PyMySQL 安装

1.方法一:
1.命令行输入(下载模块 pymysql)
pip3 install pymysql

2.方法二:
切换下载的源(仓库)
pip3 install pymysql -i 源地址 下载第三方模块的方式

三:pyMySQL模块基本使用

1.pyMySQL模块基本使用
import pymysql

# 创建链接
conn = pymysql.connect( # 赋值给 conn连接对象
host='127.0.0.1', # 本地回环地址
port=3306, # 默认端口
user='root', # 用户名
password='123', # 密码
database='db_01', # 连接数据库名称
charset='utf8' # 编码 不能写utf-8
) # 生成一个游标对象(相当于cmd打开mysql中的 mysql>)
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 让数据自动组织成字典
# 定义SQL语句
sql = 'select * from egg'
# 执行SQL语句
cursor.execute(sql)
# 获取返回结果
res = cursor.fetchall()
print(res)

三:pymysql主要方法

1.pymysql主要方法
import pymysql

# 创建链接
conn = pymysql.connect( # 赋值给 conn连接对象
host='127.0.0.1', # 本地回环地址
port=3306, # 默认端口
user='root', # 用户名
password='123', # 密码
database='db_01', # 连接数据库名称
charset='utf8' # 编码 不能写utf-8
) # 生成一个游标对象(相当于cmd打开mysql中的 mysql>)
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 让数据自动组织成字典
# 定义SQL语句
sql = 'select * from egg'
# 执行SQL语句
ret = cursor.execute(sql) print(ret) # 返回值是执行SQL语句之后受影响的行数 # 获取返回结果
# res = cursor.fetchall() # 列表套字典
# res = cursor.fetchone() # 数据字典
# res = cursor.fetchmany(3) # 列表套字典
print(res)

2.内容解析:
1.execute返回值是执行SQL语句之后受影响的行数

2.fetchall()获取所有的结果
fetchone()获取结果集第一个结果
fetchmany()括号内可以指定获取几个结果集

四:fetchall对数据存在光标的概念

1.验证光标的存在
import pymysql

# 创建链接
conn = pymysql.connect( # 赋值给 conn连接对象
host='127.0.0.1', # 本地回环地址
port=3306, # 默认端口
user='root', # 用户名
password='123', # 密码
database='db_01', # 连接数据库名称
charset='utf8' # 编码 不能写utf-8
) # 生成一个游标对象(相当于cmd打开mysql中的 mysql>)
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 让数据自动组织成字典
# 定义SQL语句
sql = 'select * from egg'
# 执行SQL语句
ret = cursor.execute(sql)
print(ret) # 返回值是执行SQL语句之后受影响的行数
# 获取返回结果
res = cursor.fetchall()
res1 = cursor.fetchall()
print(res)
print(res1)

2.fetchone异常返回结果原因
解析:
上述方法对数据的获取也存在光标的概念 fetchall()获取所有的结果

3.解决光标移动问题
4.相对移动(相对当前位置移动)
import pymysql

# 创建链接
conn = pymysql.connect( # 赋值给 conn连接对象
host='127.0.0.1', # 本地回环地址
port=3306, # 默认端口
user='root', # 用户名
password='123', # 密码
database='db_01', # 连接数据库名称
charset='utf8' # 编码 不能写utf-8
) # 生成一个游标对象(相当于cmd打开mysql中的 mysql>)
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 让数据自动组织成字典
# 定义SQL语句
sql = 'select * from egg'
# 执行SQL语句
ret = cursor.execute(sql)
print(ret) # 返回值是执行SQL语句之后受影响的行数
# 获取返回结果
res = cursor.fetchone() # 获取结果集的第一个结果
# cursor.scroll(1, 'relative') # 相对当前位置移动(相对移动)
# cursor.scroll(0, 'absolute') # 相对数据开头位置移动(绝对移动)
res1 = cursor.fetchall() # 获取所有结果
print(res)
print(res1)

相对移动



绝对移动

五:SQL注入问题

1.验证注入问题存在
import pymysql

# 创建链接
conn = pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
password='123',
database='db_01',
charset='utf8'
) # 生成一个游标对象
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 让数据自动组织成字典 # 获取用户名和密码
username = input('username>>>:').strip()
password = input('password>>>:').strip() # 构造SQL语句
sql = "select * from egg where name='%s' and password='%s'"%(username,password)
print(sql)
# 执行sql语句
cursor.execute(sql)
# 获取所有返回结果
res = cursor.fetchall()
# if判断
if res:
print(res)
print('登录成功')
else:
print('用户名或密码错误')

目前的pymysq代码用户登录是否安全了?
让我们进行测试pymysql代码(安全性)
2.漏洞1

3.漏洞2

4.综合以上漏洞
1.用户名不正确 不需要密码也能登录
2.用户名和密码都不需要也能登录

5.造成sql语句漏洞的原因(sql注入问题)
SQL注入问题的产生
就是通过一线特殊符号的组合 达到某些特定的效果从而避免常规的逻辑
SQL注入问题如何解决
execute方法自动帮你解决

六:execute方法(解决sql注入问题)

1.execute方法
execute方法,自动将 用户名和密码放在对应的%s内,并且放之前会自动对用户名和密码做特殊符号的校验,确保安全性。
2.解决注入问题
import pymysql

# 创建链接
conn = pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
password='123',
database='db_01',
charset='utf8'
) # 生成一个游标对象
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 让数据自动组织成字典 登录功能
1.获取用户名和密码
2.基于用户名和密码直接精准查找
username = input('username>>>:').strip()
password = input('password>>>:').strip() # 构造SQL语句
sql = "select * from egg where name=%s and password=%s" # 针对核心数据 不要自己拼接 交由execute方法帮你筛选再拼接
print(sql)
# 执行sql语句
cursor.execute(sql,(username, password))
# 获取所有返回结果
res = cursor.fetchall()
# if判断
if res:
print(res)
print('登录成功')
else:
print('用户名或密码错误')



七:conn.commit()二次确认

1.二次确认作用
二次确认作用:
针对增删改操作 需要二次确认才可生效
2.验证不使用二次确认情况
import pymysql

# 创建链接
conn = pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
password='123',
database='db_01',
charset='utf8'
) # 生成一个游标对象
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 让数据自动组织成字典
sql1 = 'select * from egg' # 查询表内数据
sql2 = 'insert into egg(name,password) values(%s,%s)' # 插入数据
sql3 = 'update egg set name=jasonNB where id=1' # 修改数据
sql4 = 'delete from egg where id=2' # 删除数据
3.查询表内数据 无影响
cursor.execute(sql1)
print(cursor.fetchall())

2.插入语句能够执行 但是并没有影响数据
cursor.execute(sql2,('objk',123))

3.更新语句能够执行,但是并没有影响表的数据
res = cursor.execute(sql3)
print(res)

4.删除语句能够执行,但是并没有影响数据

res = cursor.execute(sql4)
print(res)

5.总结:
1.查询语句可以正常执行并获取结果
cursor.execute(sql1)
2.插入语句能够执行 但是并没有影响表数据
cursor.execute(sql2,('jackson',666))
3.更新语句能够执行 但是并没有影响表数据
res = cursor.execute(sql3)
print(res)
4.删除语句能够执行 但是并没有影响表数据
res = cursor.execute(sql4)
print(res)
6.不能实现增删改原因
因为,该四项操作重要程度不一样,增删改查的级别不一样,查的级别是最低的,所有可以操作,但是,增删改的级别最高的,pymysq没有权限去操作,需要使用到二次确认才能进行增删改操作。

'''针对增删改操作 需要二次确认才可生效 '''
7.conn.commit()二次确认
二次确认关键字:
commit()
作用:
针对增删改操作 需要二次确认才可生效
8.验证二次确认(手动测试)
'''针对增删改操作 需要二次确认才可生效'''
# 1.插入数据
cursor.execute(sql2,('tony',123))
# 二次确认
conn.commit() # 2.修改数据
cursor.execute(sql3)
# 二次确认
conn.commit() # 3.删除数据
cursor.execute(sql4)
# 二次确认
conn.commit()

9.解决手动操作二次确认(自动化二次确认)
自动二次确认:
autocommmit=True # 涉及到增删改查 自动二次确认
import pymysql

# 创建链接
conn = pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
password='123',
database='db_01',
charset='utf8',
autocommit=True # 涉及到增删改 自动二次确认
) # 生成一个游标对象
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 让数据自动组织成字典
sql1 = 'select * from egg'
sql2 = 'insert into egg(name,password) values(%s,%s)'
sql3 = 'update egg set name="jaonNB" where id=2'
sql4 = 'delete from egg where id=1' '''针对增删改操作 需要二次确认才可生效'''
# 1.插入数据
cursor.execute(sql2,('laike',123)) # 2.修改数据
cursor.execute(sql3) # 3.删除数据
cursor.execute(sql4) 主动关闭链接 释放资源
conn.close()

八:executemany()同时插入多个数据

1.同时插入多个数据
# 同时插入多个数据
cursor.executemany(sql2,[('jason1',1),('jason2',2),('jason3',3)])

python操作MySQL数据库连接的更多相关文章

  1. python操作mysql数据库的相关操作实例

    python操作mysql数据库的相关操作实例 # -*- coding: utf-8 -*- #python operate mysql database import MySQLdb #数据库名称 ...

  2. Python开发【第十九篇】:Python操作MySQL

    本篇对于Python操作MySQL主要使用两种方式: 原生模块 pymsql ORM框架 SQLAchemy pymsql pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb ...

  3. Day12(补充) Python操作MySQL

    本篇对于Python操作MySQL主要使用两种方式: 原生模块 pymsql ORM框架 SQLAchemy pymsql pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb ...

  4. python操作三大主流数据库(3)python操作mysql③python操作mysql的orm工具sqlaichemy安装配置和使用

    python操作mysql③python操作mysql的orm工具sqlaichemy安装配置和使用 手册地址: http://docs.sqlalchemy.org/en/rel_1_1/orm/i ...

  5. python操作三大主流数据库(2)python操作mysql②python对mysql进行简单的增删改查

    python操作mysql②python对mysql进行简单的增删改查 1.设计mysql的数据库和表 id:新闻的唯一标示 title:新闻的标题 content:新闻的内容 created_at: ...

  6. python操作mysql数据库增删改查的dbutils实例

    python操作mysql数据库增删改查的dbutils实例 # 数据库配置文件 # cat gconf.py #encoding=utf-8 import json # json里面的字典不能用单引 ...

  7. Python使用MySQLConnector/Python操作MySQL、MariaDB数据库

    使用MySQL Connector/Python操作MySQL.MariaDB数据库   by:授客 QQ:1033553122 因目前MySQLdb并不支持python3.x,而MySQL官方已经提 ...

  8. mysql数据库----python操作mysql ------pymysql和SQLAchemy

    本篇对于Python操作MySQL主要使用两种方式: 原生模块 pymsql ORM框架 SQLAchemy 一.pymysql pymsql是Python中操作MySQL的模块,其使用方法和MySQ ...

  9. 【转】python操作mysql数据库

    python操作mysql数据库 Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口. Python 数据库接口支持非常多的数据库 ...

随机推荐

  1. 【剑指Offer】扑克牌顺子 解题报告(Python)

    [剑指Offer]扑克牌顺子 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews 题目描 ...

  2. codeforce -602B Approximating a Constant Range(暴力)

    B. Approximating a Constant Range time limit per test 2 seconds memory limit per test 256 megabytes ...

  3. C#反射调用 异常信息:Ambiguous match found.

    异常信息(异常类型:System.Reflection.AmbiguousMatchException)异常提示:Ambiguous match found.异常信息:Ambiguous match ...

  4. POJ 3278:The merchant(LCA&DP)

    The merchant Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 6864   Accepted: 2375 Desc ...

  5. MyBatis 流式查询

    流式查询指的是查询成功后不是返回一个集合而是返回一个迭代器,应用每次从迭代器取一条查询结果.流式查询的好处是能够降低内存使用. 流式查询的过程当中,数据库连接是保持打开状态的,因此要注意的是:执行一个 ...

  6. 「算法笔记」BSGS 与 exBSGS

    一.离散对数 给定 \(a,b,m\),存在一个 \(x\),使得 \(\displaystyle a^x\equiv b\pmod m\) 则称 \(x\) 为 \(b\) 在模 \(m\) 意义下 ...

  7. ACE_Get_Opt函数笔记

    #include "ace/OS_NS_string.h" #include "ace/Configuration.h" #include "ace/ ...

  8. Flink sql 之 微批处理与MiniBatchIntervalInferRule (源码分析)

    本文源码基于flink1.14 平台用户在使用我们的flinkSql时经常会开启minaBatch来优化状态读写 所以从源码的角度具体解读一下miniBatch的原理 先看一下flinksql是如何触 ...

  9. MySQL高级查询与编程笔记 • 【第1章 数据库设计原理与实战】

    全部章节   >>>> 本章目录 1.1 数据需求分析 1.1.1 数据需求分析的定义 1.1.2 数据需求分析的步骤和方法 1.1.3 数据流程图 1.1.4 数据字典 1. ...

  10. 编写Java程序,定义一个类似于ArrayList集合类

    返回本章节 返回作业目录 需求说明: 设计一个类似于ArrayList的集合类ListArray. ListArray类模拟实现动态数组,在该类定义一个方法用于实现元素的添加功能,以及用于获取List ...