Python使用pymysql操作数据库

news2025/1/14 0:45:09

        大家好,当涉及到与数据库进行交互和操作时,Python的pymysql库是一个常用且功能强大的选择。pymysql提供了与MySQL数据库的连接、查询、插入、更新和删除等操作的方法,使得在Python中进行数据库操作变得简单而高效。

1、安装 pymysql 库

在开始之前,确保已经安装了 pymysql 库。可以使用以下命令通过 pip 进行安装:

pip install pymysql

2、连接数据库

        首先,我们需要建立与数据库的连接。使用 pymysql 的 connect() 函数来创建一个数据库连接对象,该函数接受数据库的连接参数,例如主机名、用户名、密码、数据库名等。以下是一个建立与 MySQL 数据库的连接的示例:

import pymysql

# 建立数据库连接
connection = pymysql.connect(
    host='localhost',
    user='username',
    password='password',
    database='database_name'
)

        在上述示例中,我们通过传递数据库的连接参数来建立与数据库的连接。根据实际情况,您需要将 hostuserpassword 和 database 替换为相应的值。

3、创建游标对象

        在建立数据库连接后,我们需要创建一个游标对象来执行 SQL 语句和操作数据库。游标对象允许我们执行查询、插入、更新或删除等数据库操作。

# 创建游标对象
cursor = connection.cursor()

4、执行 SQL 查询

        使用游标对象,我们可以执行 SQL 查询并获取结果。pymysql 提供了多个方法来执行查询,其中最常用的是 execute() 和 fetchone()fetchall() 方法。

  • execute() 方法用于执行 SQL 查询,可以接受带有占位符的参数。
  • fetchone() 方法用于获取查询结果的下一行数据。
  • fetchall() 方法用于获取查询结果的所有行数据。

以下是一个执行查询并获取结果的示例:

# 执行查询
cursor.execute('SELECT * FROM table_name')

# 获取查询结果的所有行数据
rows = cursor.fetchall()

# 遍历结果
for row in rows:
    print(row)

        在上述示例中,我们执行了一个简单的查询语句,并使用 fetchall() 方法获取查询结果的所有行数据。然后,我们遍历每一行数据并将其打印出来。

5、执行 SQL 插入、更新和删除操作

        除了执行查询,pymysql 也支持执行插入、更新和删除等操作。使用 execute() 方法执行这些操作,可以将相应的 SQL 语句作为参数传递给它。

(1)插入操作

# 执行插入操作
cursor.execute("INSERT INTO table_name (column1, column2) VALUES (%s, %s)", ('value1', 'value2'))

# 提交事务
connection.commit()

(2)更新操作

# 执行更新操作
cursor.execute("UPDATE table_name SET column1 = %s WHERE column2 = %s", ('new_value', 'condition'))

# 提交事务
connection.commit()

(3)删除操作

# 执行删除操作
cursor.execute("DELETE FROM table_name WHERE column1 = %s", ('condition',))

# 提交事务
connection.commit()

        在上述示例中,我们使用 execute() 方法执行了插入、更新和删除操作,并使用参数占位符 %s 来传递值。最后,我们通过 connection.commit() 提交事务。

6、关闭连接

在完成数据库操作后,不要忘记关闭数据库连接,以释放资源。

# 关闭游标对象
cursor.close()

# 关闭数据库连接
connection.close()

在上述示例中,我们使用 close() 方法关闭了游标对象和数据库连接。

7、完整实例

        以下是一个完整的例子,展示了如何连接到MySQL数据库、创建表、插入数据、执行查询并获取结果:

import pymysql

# 建立数据库连接
connection = pymysql.connect(
    host='localhost',
    user='username',
    password='password',
    database='database_name'
)

try:
    # 创建游标对象
    cursor = connection.cursor()

    # 创建表
    create_table_query = '''
    CREATE TABLE IF NOT EXISTS employees (
        id INT AUTO_INCREMENT PRIMARY KEY,
        name VARCHAR(100),
        age INT,
        department VARCHAR(100)
    )
    '''
    cursor.execute(create_table_query)

    # 插入数据
    insert_query = "INSERT INTO employees (name, age, department) VALUES (%s, %s, %s)"
    employees_data = [
        ('John Doe', 30, 'IT'),
        ('Jane Smith', 35, 'HR'),
        ('Mark Johnson', 28, 'Sales')
    ]
    cursor.executemany(insert_query, employees_data)

    # 提交事务
    connection.commit()

    # 执行查询
    select_query = "SELECT * FROM employees"
    cursor.execute(select_query)

    # 获取查询结果的所有行数据
    rows = cursor.fetchall()

    # 打印查询结果
    for row in rows:
        print(row)

finally:
    # 关闭游标对象和数据库连接
    cursor.close()
    connection.close()

在上述示例中,我们首先建立了与MySQL数据库的连接,然后使用游标对象执行以下操作:

  1. 创建表:我们使用CREATE TABLE语句创建了一个名为employees的表,具有id、name、age和department等列。

  2. 插入数据:我们使用executemany()方法批量插入了几条员工数据。

  3. 提交事务:使用connection.commit()提交所有的插入操作,将数据持久化到数据库。

  4. 执行查询:我们执行了一个简单的SELECT查询语句,并使用fetchall()方法获取查询结果的所有行数据。

  5. 打印查询结果:我们遍历查询结果,并将每一行数据打印出来。

  6. 最后,关闭了游标对象和数据库连接,释放了资源。

8、连接池

        使用pymysqlConnectionPool()函数创建一个数据库连接池对象。该函数接受连接参数,例如主机名、用户名、密码、数据库名等,以及一些连接池相关的参数,例如最大连接数、最小空闲连接数等。

以下是创建连接池的示例:

# 创建连接池
connection_pool = pymysql.cursors.ConnectionPool(
    host='localhost',
    user='username',
    password='password',
    database='database_name',
    autocommit=True,
    charset='utf8mb4',
    cursorclass=pymysql.cursors.DictCursor,
    maxconnections=10,
    mincached=5
)

        在上述示例中,我们使用了一些常用的连接池参数,如maxconnections表示最大连接数,mincached表示最小空闲连接数。可以根据实际需求调整这些参数。

        使用连接池对象的connection()方法从连接池中获取一个数据库连接。这样,每次需要连接时,可以直接从连接池中获取,而不需要手动创建连接。

# 从连接池获取连接
connection = connection_pool.get_connection()

现在,可以使用connection对象执行数据库操作。例如执行查询、插入、更新和删除等。

# 创建游标对象
cursor = connection.cursor()

# 执行查询
cursor.execute("SELECT * FROM table_name")

# 获取查询结果的所有行数据
rows = cursor.fetchall()

# 打印查询结果
for row in rows:
    print(row)

# 关闭游标对象
cursor.close()

# 将连接返回给连接池
connection_pool.release(connection)

在上述示例中,使用连接对象的cursor()方法创建游标对象,并执行了一个查询操作。最后,我们关闭了游标对象,并使用连接池的release()方法将连接返回给连接池。

在程序结束时,确保关闭连接池,以释放资源。

# 关闭连接池
connection_pool.close()

以下是一个完整的pymysql连接池的示例:

import pymysql.cursors

# 创建连接池
connection_pool = pymysql.cursors.ConnectionPool(
    host='localhost',
    user='username',
    password='password',
    database='database_name',
    autocommit=True,
    charset='utf8mb4',
    cursorclass=pymysql.cursors.DictCursor,
    maxconnections=10,
    mincached=5
)

try:
    # 从连接池获取连接
    connection = connection_pool.get_connection()

    # 创建游标对象
    cursor = connection.cursor()

    # 执行查询
    cursor.execute("SELECT * FROM table_name")

    # 获取查询结果的所有行数据
    rows = cursor.fetchall()

    # 打印查询结果
    for row in rows:
        print(row)

    # 关闭游标对象
    cursor.close()

    # 将连接返回给连接池
    connection_pool.release(connection)

finally:
    # 关闭连接池
    connection_pool.close()

在上述示例中,首先创建了一个pymysql连接池对象,设置了连接池的参数,如最大连接数和最小空闲连接数。

然后,在try-finally块中执行以下操作:

  • 从连接池获取连接:

    使用连接池对象的get_connection()方法从连接池中获取一个数据库连接。

  • 执行查询:

    使用获取的连接对象创建游标对象,并执行查询操作。

  • 获取查询结果:

    使用游标对象的fetchall()方法获取查询结果的所有行数据。

  • 打印查询结果:

    遍历查询结果,并将每一行数据打印出来。

  • 关闭游标对象:

    使用游标对象的close()方法关闭游标对象。

  • 将连接返回给连接池:

    使用连接池对象的release()方法将连接返回给连接池,以便重复使用。

最后,在finally块中,关闭了连接池,确保在程序结束时释放资源。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1691305.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python判断字符串是否为回文串的详细解析与实现

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、引言:回文串的定义与背景 二、判断回文串的基本思路 示例解析 三、代码实…

LabVIEW和ZigBee无线温湿度监测

LabVIEW和ZigBee无线温湿度监测 随着物联网技术的迅速发展,温湿度数据的远程无线监测在农业大棚、仓库和其他需环境控制的场所变得日益重要。开发了一种基于LabVIEW和ZigBee技术的多区域无线温湿度监测系统。系统通过DHT11传感器收集温湿度数据,利用Zig…

【ARK Survival Evolved】方舟:生存进化一键使用服务器开服联机教程

1、进入控制面板 2、第一次购买服务器会安装游戏端,大约5分钟左右,如果长时间处于安装状态请联系客服 3、设置游戏端口 方舟生存进化的设置需要三个端口,它们用于游戏端口(必须为首选端口),查询端口&#…

html5 笔记02

目录 01 svg的基本使用 02 svg绘图 03 进程和线程 01 svg的基本使用 svg和canvas的区别: canvas: 1.canvas作为一个容器只有一个dom元素 ,内部元素无法使用dom操作 (canvas不能展开然后选择不到 svg查看元素能选中因为是通过标签控制的) 2.canvas 是配合js完成各种绘制效果 …

【学习笔记】Webpack5(Ⅱ)

Webpack 3、高级篇 3.1、提升开发体验 —— SourceMap 3.2、提升打包速度 3.2.1 HotModuleReplacement 3.2.2 OneOf 3.2.3 Include / Exclude 3.2.4 Cache 3.2.5 Thread 3.3、减少代码体积 …

iMX6ULL 嵌入式linux开发 | 4G无线广播终端实现方案介绍

现有的有线广播,如村上的大喇叭,需要布线,施工麻烦。借助现有的4G网络,传输音频流完全没问题,4G网络结合流媒体技术和MQTT消息传递实现设备间的同步推拉流。这种方案可以避免有线布线的麻烦,同时实现4G无线…

Spark在YARN上运行图解(资源调度+任务调度)及案例

前提:已经安装了spark集群,可参考上篇文章搭建:http://t.csdnimg.cn/UXBOp 一、Spark集群配置YARN 1、增加hadoop 配置文件地址 vim spark-env.sh 增加export HADOOP_CONF_DIR/usr/local/soft/hadoop-3.1.1/etc/hadoop 2、关闭虚拟内存 cd …

DMR对讲机数字协议详解

一、概述 DMR数字对讲机协议是欧洲电信标准协会在2005年4月推出的数字对讲机标准,后来又进行了多次修改。最新版本DMR数字对讲机协议是2007年12月公布的,共有四部分:第一部分为空中接口物理层和数据链路层协议,第二部分为空中接口…

【Unity AR开发插件】四、制作热更数据-AR图片识别场景

专栏 本专栏将介绍如何使用这个支持热更的AR开发插件,快速地开发AR应用。 链接: Unity开发AR系列 插件简介 通过热更技术实现动态地加载AR场景,简化了AR开发流程,让用户可更多地关注Unity场景内容的制作。 “EnvInstaller…”支…

牛客网刷题 | BC93 公务员面试

目前主要分为三个专栏,后续还会添加: 专栏如下: C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读! 初来乍到,如有错误请指出,感谢! 描述 公务员面试现场打分…

【安装笔记-20240520-Windows-在 QEMU 中尝试运行 OpenWRT】

安装笔记-系列文章目录 安装笔记-20240520-Windows-在 QEMU 中尝试运行 OpenWRT 文章目录 安装笔记-系列文章目录安装笔记-20240520-Windows-在 QEMU 中尝试运行 OpenWRT 前言一、软件介绍名称:OpenWRT主页官方介绍 二、安装步骤测试版本:openwrt-23.05…

C语言在VS中使用scanf报错?

我们在使用VS时,用scanf函数,VS会报以下错误: 以下是解决方法: 来到输出窗口,复制以下语句:_CRT_SECURE_NO_WARNINGS 第一种暂时方法 1.在代码的第一行,写下:#define _CRT_SECURE_…

vuejs路由和组件系统

前端路由原理 createRouter * hash* window.addEventListener(hashChange)* 两种实现路由切换的模式:UI组件(router-link,router-view),Api(push()方法) * history * HTML5新增的API &#xff0…

2024年电工杯A题论文首发+摘要分享+问题一代码分享

问题一论文代码链接:https://pan.baidu.com/s/1kDV0DgSK3E4dv8Y6x7LExA 提取码:sxjm --来自百度网盘超级会员V5的分享 园区微电网风光储协调优化配置 摘要:园区微电网由风光发电和主电网联合为负荷供电,为了尽量提高风光电量的…

机器人运动轨迹学习——GMM/GMR算法

机器人运动轨迹学习——GMM/GMR算法 前置知识 GMM的英文全称为:Gaussian mixture model,即高斯混合模型,也就是说,它是由多个高斯模型进行混合的结果:当然,这里的混合是带有权重概念的。 一维高斯分布 GMM中…

鸿蒙布局List简介

鸿蒙布局List简介 List--常见的布局容器List 创建方式创建方式一,通过Listitem创建方式二,通过ForEach和Listitem创建方式三,通过ListItemGroup List–常见的布局容器 List是在app开发中最常见的一种布局方式,例如通讯录、新闻列…

Vue3实现简单的瀑布流效果,可抽离成组件直接使用

先来看下效果图: 瀑布流中的内容可进行自定义,这里的示例图是通过不同背景颜色的展示进行区分,每个瀑布流中添加了自定义图片和文字描述。 实现方式: 1.建立子组件(可单独抽离)写出瀑布流的样式 文件名为…

远程桌面连接不上远程服务器,如何有效的解决远程桌面连接不上远程服务器的问题

在解决远程桌面连接不上远程服务器的问题时,我们需要采取一种专业且系统的方法来排查和修复可能存在的故障。以下是一些建议和步骤,帮助用户更有效地解决此类问题。 首先,用户需要确认远程服务器的状态和网络连接是否正常。 这包括检查服务器…

51汇编版--配套proteus仿真

代码配套的仿真,我自己试过是好使的,外部中断,计数功能要自己添加脉冲信号或按键才能有对应现象,自己搞一下子。 不限速下载链接 https://wwo.lanzoul.com/iQ46m1zm456j 密码:g92f 如果连接不正常,请尝试将lanzoul的…

Python游戏编程:一步步用Python打造经典贪吃蛇小游戏

贪吃蛇作为一款极其经典且广受欢迎的小游戏,是早期 Windows 电脑和功能手机(特别是诺基亚手机)流行度极高的小游戏,是当时功能手机时代最具代表性的游戏之一。游戏的基本规则和目标十分简单,但却极具吸引力&#xff0c…