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

这篇具有很好参考价值的文章主要介绍了【Python】Python操作MySQL详解——PyMySQL。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一,Python操作数据库简介

Python标准数据库规范为 DB-API, DB-API定义了一系列必须的对象和数据库操作方式,以便为各种数据库系统和数据库访问程序提供一致的访问接口。
pymysql,mysql,Python,python,mysql,sql
开发人员将接口封装成不同的数据库操作模块,不同的数据库需要不同数据库操作模块,例如,MySQL数据库,它对应以下操作模块:https://wiki.python.org/moin/MySQL
pymysql,mysql,Python,python,mysql,sql
其中,最常用的应该是
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,mysql,Python,python,mysql,sql

(二)PyMySQL使用

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

import pymysql
conn = 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 pymysql
conn = 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 中字符串格式化中的转换说明符。
pymysql,mysql,Python,python,mysql,sql

# 元组、列表形式传参
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://www.toymoban.com/news/detail-782967.html

到了这里,关于【Python】Python操作MySQL详解——PyMySQL的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python基础----10-----python操作mysql

    对于SQL章节前言-SQL_DQL_排序分页的课程,这里不做记录,因为都是讲MYSQL本身的内容,与python无关。 当然,接下来的课需要用到mysql,所以大家需要自行下载,这并不难。 安装第三方库。 即在pymysql进行插入或者修改的sql语句时,需要添加xxx.commit(),否则无法插入或者修改。

    2024年02月08日
    浏览(51)
  • Python 操作 MySQL 数据库:使用 mysql-connector-python 库

    在现代应用程序中,与数据库的交互是不可或缺的一部分。Python 提供了许多库来连接和操作各种数据库,其中最常用的之一就是 mysql-connector-python 。本篇博客将介绍如何使用 Python 操作 MySQL 数据库,包括连接数据库、创建表、插入数据、查询数据以及更新和删除数据等操作。

    2024年02月03日
    浏览(54)
  • 【Python】操作MySQL

    安装第三方库: 由于MySQL经常需要使用到增删改查,为此,提供一个工具类

    2024年02月11日
    浏览(39)
  • Python操作之MySQL

    目录 安装PyMySQL PyMySQL操作mysql步骤 创建表格 连接Mysql 游标 事务特性 事务提交 查数据库 增删数据库 封装mysql类 错误处理 总结 在使用Python中我们都要安装相关的库,mysql在python经常使用的库为PyMySQL,安装如下: pip install PyMySQL 1.创建连接。使用PyMySQL模块提供的‘connect’函数

    2024年02月08日
    浏览(37)
  • Python操作mysql

    一、python对MySQL的基本操作 1.连接数据 2.创建数据库 3.进入数据库创建表 4. 查看数据库中的表 5.新增数据 6.删除 7.修改数据 8.查询数据 9.关闭数据库 10.执行存储过程 其他略 二、python操作MySQL的应用 1.登录注册 2.防止sql注入 1.注入示例 如果用户在输入user时,输入了: ’ or

    2024年02月16日
    浏览(40)
  • Python 操作Mysql(PyMysql)

    Python 操作 Mysql 常用方式: PyMysql:纯 Python 语言编写的 Mysql 操作客户端,安装方便,支持 Python3。 SQLAlchemy:是一个非常强大的 ORM 框架,不提供底层的数据库操作,主要是通过定义模型对应数据表结构,在 Python Web 编程领域应用广泛。 在实际项目中,如果仅仅是简单的爬虫

    2024年02月04日
    浏览(39)
  • Python操作MySQL基础使用

    查询结果(里面身份证为for循环生产的虚拟数据): 为了让程序更加健壮,我们一般不会链接数据库这样调用该函数,先不说麻烦与否,如果我们经常要修改连接参数,那么我们所有调用地方都会修改,这样的代码十分不健壮。所以我们应该使用模块化进行解决,代码如下:

    2024年02月07日
    浏览(43)
  • Python 操作 MySQL 数据库

    Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口。 Python 数据库接口支持非常多的数据库,你可以选择适合你项目的数据库: GadFly mSQL MySQL PostgreSQL Microsoft SQL Server 2000 Informix Interbase Oracle Sybase 你可以访问Python数据库接口及API查看详细的支

    2024年02月14日
    浏览(42)
  • Python——操作MySQL数据库

    😊学习永无止境,记得每天学习新的知识!! 在很多业务场景中,我们或多或少都要对数据库上的数据进行的一系列操作, 包括读取数据、写数据、更新或修改数据、删除数据 等。这些操作可以通过编写SQL语句来实现,也可以通过使用数据库管理系统提供的API接口来实现。

    2024年02月09日
    浏览(43)
  • Python + pymysql 之 MySQL 查询操作

    在MySQL中构建一个测试表,如下:  打印输出结果: 从中可以看出,默认情况下,查询结果返回的是元组tuple形式 返回元组会有一个问题,当你只查询一个属性字段时,返回的结果会是有逗号的元组 例如:sql改变一下 此时,打印输出结果: 此时,建议return前,简单处理一下

    2024年02月13日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包