我的编程空间,编程开发者的网络收藏夹
学习永远不晚

【Python】Python操作MySQL详解——PyMySQL

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

【Python】Python操作MySQL详解——PyMySQL

Python操作MySQL详解——PyMySQL

一,Python操作数据库简介

Python标准数据库规范为 DB-API, DB-API定义了一系列必须的对象和数据库操作方式,以便为各种数据库系统和数据库访问程序提供一致的访问接口。
在这里插入图片描述
开发人员将接口封装成不同的数据库操作模块,不同的数据库需要不同数据库操作模块,例如,MySQL数据库,它对应以下操作模块:https://wiki.python.org/moin/MySQL
在这里插入图片描述
其中,最常用的应该是
1,MySQL-python:也就是MySQLdb,底层是通过C操作MySQL,效率高,但是只支持py2,不支持py3。
2,mysqlclient:是MySQL-python的一个分支。它增加了Python 3支持,并修复了许多错误。Django文档推荐的MySQL依赖库。
3,PyMySQL:纯Python实现的模块,可以与Python代码兼容衔接,并也几乎兼容MySQL-python。
4,MySQL Connector/Python:MySQL官方推出的纯Python实现的模块。

二,Python操作MySQL——PyMySQL

(一)PyMySQL模块简介

纯Python实现的模块,可以与Python代码兼容衔接,并也几乎兼容MySQL-python。遵循 Python 数据库 API v2.0 规范。安装PyMySQL需要满足以下需求。
在这里插入图片描述

(二)PyMySQL使用

1,连接数据库
使用connect函数创建连接对象,此连接对象提供关闭数据库、事务提交、事务回滚等操作。
传入参数有很多,具体参考文档,一般参数基本连接信息 host, user, password, port(默认为3306), database。

import pymysqlconn = pymysql.connect(    host='127.0.0.1',    user='xxx',    password='xxxx',    port=3306,    database='nba_data')

主要方法

方法功能
cursor()获取游标对象,操作数据库,如执行DML操作,调用存储过程等
commit()提交事务
rollback()回滚事务
close()关闭数据库连接

2,操作数据库
使用Cursor对象与数据库进行交互。具体方法参考:https://pymysql.readthedocs.io/en/latest/modules/cursors.html

2.1,查询操作

import pymysqlconn = pymysql.connect(    host='127.0.0.1',    user='python_link',    password='python_link',    port=3306,    database='nba_data')# 创建游标,查询数据以元组形式返回# cursor = conn.cursor()# 创建游标,查询数据以字典形式返回cursor = conn.cursor(pymysql.cursors.DictCursor)sql = 'select * from player_info_test limit 10'try:    cursor.execute(sql)    # result = cursor.fetchall()  # 返回所有数据    # result = cursor.fetchone()  # 返回一行数据    result = cursor.fetchmany(2)  # fetchmany(size) 获取查询结果集中指定数量的记录,size默认为1    print(result)except Exception as e:    conn.rollback()    print(e)finally:    cursor.close()    conn.close()

2.2,插入操作
插入操作中参数可以以元组、列表和字典形式传入,需要使用到占位符 “%s”,注意这只是个占位符,不同于Python 中字符串格式化中的转换说明符。
在这里插入图片描述

# 元组、列表形式传参sql = 'insert into player_info_test(PERSON_ID,PERSON_NAME,AGE) VALUES(%s, %s, %s)'try:    cursor.execute(sql, ("999999", "kenny", 28))    conn.commit()except Exception as e:    conn.rollback()    print(e)finally:    cursor.close()    conn.close()# 字典形式传参sql = 'insert into player_info_test(PERSON_ID,PERSON_NAME,AGE) VALUES(%(person_id)s, %(person_name)s, %(age)s)'try:    cursor.execute(sql, {"person_id": "999998", "person_name": "kenny", "age": 28})    conn.commit()except Exception as e:    conn.rollback()    print(e)finally:    cursor.close()    conn.close()

2.3,更新操作

sql = 'update  player_info_test set PERSON_NAME=%s where PERSON_ID = %s'try:    cursor.execute(sql, ['liu', '999998'])    conn.commit()except Exception as e:    conn.rollback()    print(e)finally:    cursor.close()    conn.close()

2.4,删除操作

sql = 'delete from  player_info_test where PERSON_ID = %s'try:    cursor.execute(sql, ['999999'])    conn.commit()except Exception as e:    conn.rollback()    print(e)finally:    cursor.close()    conn.close()

增删改需要有提交事务的操作,除了execute方法,还有批量操作方法executemany()。

2.5,批量插入操作

sql = 'insert into player_info_test(PERSON_ID,PERSON_NAME,AGE) VALUES(%s, %s, %s)'param = [("999999", "kenny", 28), (["999998", "liu", 28)]   # 元组列表作为传入参数try:    cursor.executemany(sql, param)    conn.commit()except Exception as e:    conn.rollback()    print(e)finally:    cursor.close()    conn.close()

(三)SQL防注入

SQL注入是一种常见的网络攻击手法,它利用sql的语法特性和程序员编写程序时产生的漏洞,用一些特殊符号的组合产生特殊的含义,使得正常的sql语句失效,从而逃脱正常的业务逻辑,完成一些如跳过密码验证等的非法操作。

产生原因:SQL语句使用了动态拼接的方式。

比如,登录时,使用以下SQL查询验证用户信息

'SELECT username FROM user WHERE username = %s AND password = %s' % (username ,password)

并且,没有对用户的输入做任何处理,直接放到了SQL语句中。那么,当黑客输入了’jjyang’ OR 1=1 – jjyang 作为用户名时,原来的SQL语句就会变成下面的样子:

SELECT username FROM user WHERE username = 'jjyang' OR 1=1 -- jjyang AND password=''

WHERE username = ‘jjyang’ OR 1=1 是一个恒成立的条件,所以无论输入什么用户名都会返回True;而–后面的语句被当作注释忽略掉了,密码验证也被跳过。最终,绕过验证,成功登录。

针对参数不要采用拼接处理,交给pymysql中的方法(execute)自动处理,并对输入数据进行检查校验

# 元组,列表形式param = ('jjyangs','123445')sql = 'SELECT username FROM user WHERE username = %s AND password = %s'cursor.execute(sql, param)# 字典形式param = {'name':'jjyangs','pwd':'123445'}sql = 'SELECT username FROM user WHERE username = %(name)s AND password = %(pwd)s'cursor.execute(sql, param)

需要注意的是,不要因为参数是其他类型而换掉 %s,pymysql 的占位符并不是 python 的通用格式化转换说明符。同时,也不要因为参数是 string 就在 %s 两边加引号,mysql 会自动去处理。

来源地址:https://blog.csdn.net/yangjjuan/article/details/128794807

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

【Python】Python操作MySQL详解——PyMySQL

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python中操作mysql的pymysql模块详解

前言 pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同。但目前pymysql支持python3.x而后者不支持3.x版本。 本文测试python版本:2.7.11。mysql版本:5.6.24 一、安装p
2022-06-04

python使用pymysql模块操作MySQL

目录实例一:插入数据实例二:获取某个表全部数据实例三:根据cName模糊搜索实例四:修改数据实例五:删除数据实例一:插入数据import pymysql import tkinter as tkconn = pymysql.connect(
2022-06-02

python使用pymysql实现操作mysql

pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同。但目前pymysql支持python3.x而后者不支持3.x版本。 适用环境python版本 >=2.6或3.3 mysql版本>=4.1 安装可以使用p
2022-06-04

python数据库操作指南之PyMysql使用详解

目录Pymysql使用详解安装使用连接数据库操作数据库总结PyMysql使用详解在编写小脚本时,PyMysql是快速连接并操作数据库的一个不错选择。安装pip3 install PyMysql# 可使用 pip list 查看此环境
2023-03-02

详解使用pymysql在python中对mysql的增删改查操作(综合)

这一次将使用pymysql来进行一次对MySQL的增删改查的全部操作,相当于对前五次的总结:先查阅数据库:现在编写源码进行增删改查操作,源码为:#!/usr/bin/python #coding:gbk import pymysql
2022-06-04

Python数据库操作 ---- pymysql教学

文章目录 前提准备连接数据库创建数据库创建数据表、插入数据查询数据更新数据删除数据实战应用总结 前提准备 安装mysql 在使用pymysql的前提就是又一个mysql数据库,这个数据库可以是本地数据库也可以是远程的数据
2023-08-18

python怎么操作pymysql数据库

本篇内容主要讲解“python怎么操作pymysql数据库”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“python怎么操作pymysql数据库”吧!一、安装pip install pymysq
2023-06-30

Python 操作MySQL详解及实例

Python 操作MySQL详解及实例 使用Python进行MySQL的库主要有三个,Python-MySQL(更熟悉的名字可能是MySQLdb),PyMySQL和SQLAlchemy。 Python-MySQL资格最老,核心由C语言打造,
2022-06-04

封装一个python的pymysql操作类

最近使用pymysql写脚本的情况越来越多了,刚好整理,简单封装一个pymysql的操作类import pymysqlclass MysqlDB:def __init__(self, host=None, port=None, db=No
2022-12-25

如何封装一个python的pymysql操作类

这篇“如何封装一个python的pymysql操作类”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“如何封装一个python的
2023-07-04

编程热搜

目录