手把手教你如何使用Python连接MySQL数据

news2024/9/20 15:04:29

数据库编程是在应用程序中与数据库交互和管理数据的关键部分。MySQL是一种流行的关系型数据库管理系统(RDBMS),在Python中进行MySQL数据库编程相对容易。

本文介绍如何使用Python进行MySQL数据库编程,包括连接数据库、执行SQL查询、插入、更新和删除数据等操作。

文末附免费编程学习资料~

要使用Python连接MySQL数据库,最常用的库之一是mysql-connector-python。以下是一个简单的步骤说明和示例代码,展示如何使用这个库来连接MySQL数据库,并执行一些基本的数据库操作,如创建表、插入数据和查询数据。

步骤 1: 安装 mysql-connector-python

首先,你需要确保已经安装了mysql-connector-python。你可以通过pip来安装它:

pip install mysql-connector-python

步骤 2: 准备MySQL数据库

确保你有一个MySQL数据库运行着,并且有一个数据库以及相应的权限供Python程序使用。

步骤 3: 编写Python代码

以下是一个简单的Python脚本,展示如何连接到MySQL数据库,创建一个表,插入数据,并查询数据。

import mysql.connector
from mysql.connector import Error

def create_connection(host_name, user_name, user_password, db_name):
    """ 创建数据库连接 """
    connection = None
    try:
        connection = mysql.connector.connect(
            host=host_name,
            user=user_name,
            passwd=user_password,
            database=db_name
        )
        print("Connection to MySQL DB successful")
    except Error as e:
        print(f"The error '{e}' occurred")

    return connection

def execute_query(connection, query):
    """ 执行查询 """
    cursor = connection.cursor()
    try:
        cursor.execute(query)
        connection.commit()
        print("Query successful")
    except Error as e:
        print(f"The error '{e}' occurred")

def main():
    database = "your_database_name"
    host = "localhost"
    user = "your_username"
    password = "your_password"

    # 创建数据库连接
    conn = create_connection(host, user, password, database)

    if conn is not None:
        # 创建表
        create_table_query = """
        CREATE TABLE IF NOT EXISTS employees (
            id INT AUTO_INCREMENT PRIMARY KEY,
            name VARCHAR(255) NOT NULL,
            position VARCHAR(255) NOT NULL
        )
        """
        execute_query(conn, create_table_query)

        # 插入数据
        insert_query = """
        INSERT INTO employees (name, position) VALUES (%s, %s)
        """
        val = ("John Doe", "Software Engineer")
        execute_query(conn, insert_query, val)

        # 查询数据
        select_query = "SELECT * FROM employees"
        execute_query(conn, select_query)

        # 注意:由于我们使用的是mysql.connector,所以这里不能直接打印查询结果
        # 需要使用cursor来获取结果
        cursor = conn.cursor()
        cursor.execute(select_query)
        for row in cursor:
            print(row)

        # 关闭连接
        conn.close()
    else:
        print("Error! cannot create the database connection.")

if __name__ == '__main__':
    main()

注意事项

  • 在实际部署时,不要将数据库的用户名和密码硬编码在脚本中,应该使用环境变量或配置文件来管理敏感信息。
  • execute_query函数中,对于插入数据的SQL语句,你需要将参数作为元组传递给execute方法,这是为了防止SQL注入。
  • 在上面的示例中,查询结果是通过游标(cursor)获取的,并且是在查询语句执行后立即获取的。在实际应用中,你可能需要更复杂的逻辑来处理查询结果。
  • 在脚本结束时,确保关闭数据库连接以释放资源。

希望这个示例能帮助你开始使用Python连接和操作MySQL数据库。

7. 更新数据

更新数据是修改现有数据的过程。使用SQL的UPDATE语句来执行更新操作。

以下是一个示例:

# 更新"customers"表中id为1的记录
sql = "UPDATE customers SET address = %s WHERE id = %s"
values = ("456 Elm St", 1)
cursor.execute(sql, values)

# 提交更改到数据库
db.commit()

print(f"更新了 {cursor.rowcount} 条记录")



8. 删除数据

删除数据是从数据库中删除数据的过程。使用SQL的DELETE语句来执行删除操作。

以下是一个示例:

# 删除"customers"表中id为1的记录
sql = "DELETE FROM customers WHERE id = %s"
values = (1,)
cursor.execute(sql, values)

# 提交更改到数据库
db.commit()

print(f"删除了 {cursor.rowcount} 条记录")



9. 执行事务

事务是一组SQL操作,要么全部成功,要么全部失败。在某些情况下,需要使用事务来确保数据库的完整性。

以下是一个示例:

try:
    db.start_transaction()
    # 执行一系列SQL操作
    cursor.execute("INSERT INTO customers (name, address) VALUES (%s, %s)", ("Alice", "789 Oak St"))
    cursor.execute("UPDATE customers SET address = %s WHERE id = %s", ("789 Elm St", 2))
    db.commit()  # 提交事务
except:
    db.rollback()  # 事务回滚,撤销之前的操作



10. 关闭数据库连接

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

cursor.close()  # 关闭游标
db.close()  # 关闭数据库连接



11. 示例:一个完整的MySQL数据库编程示例

下面我将提供一个更完整的MySQL数据库编程示例,使用Python的mysql-connector-python库来执行一系列数据库操作,包括连接数据库、创建表、插入数据、更新数据、查询数据和删除数据。

首先,确保你已经安装了mysql-connector-python库。如果没有安装,请通过pip安装:

pip install mysql-connector-python

接下来是Python脚本的完整示例:

import mysql.connector
from mysql.connector import Error

def create_connection(host_name, user_name, user_password, db_name):
    """ 创建数据库连接 """
    connection = None
    try:
        connection = mysql.connector.connect(
            host=host_name,
            user=user_name,
            passwd=user_password,
            database=db_name
        )
        print("Connection to MySQL DB successful")
    except Error as e:
        print(f"The error '{e}' occurred")
    return connection

def execute_query(connection, query, params=None):
    """ 执行查询并处理结果 """
    cursor = connection.cursor()
    try:
        if params is None:
            cursor.execute(query)
        else:
            cursor.execute(query, params)
        connection.commit()
        print("Query successful")
        return cursor
    except Error as e:
        print(f"The error '{e}' occurred")

def main():
    database = "testdb"
    host = "localhost"
    user = "your_username"
    password = "your_password"

    # 创建数据库连接
    conn = create_connection(host, user, password, database)

    if conn is not None:
        # 创建表
        create_table_query = """
        CREATE TABLE IF NOT EXISTS students (
            id INT AUTO_INCREMENT PRIMARY KEY,
            name VARCHAR(255) NOT NULL,
            age INT NOT NULL
        )
        """
        execute_query(conn, create_table_query)

        # 插入数据
        insert_query = """
        INSERT INTO students (name, age) VALUES (%s, %s)
        """
        val = ("Alice", 24)
        execute_query(conn, insert_query, val)

        # 更新数据
        update_query = """
        UPDATE students SET age = %s WHERE name = %s
        """
        update_val = (25, "Alice")
        execute_query(conn, update_query, update_val)

        # 查询数据
        select_query = "SELECT * FROM students"
        cursor = execute_query(conn, select_query)

        print("Students:")
        for row in cursor:
            print(row)

        # 删除数据
        delete_query = """
        DELETE FROM students WHERE name = %s
        """
        delete_val = ("Alice",)
        execute_query(conn, delete_query, delete_val)

        # 再次查询数据以验证删除
        cursor = execute_query(conn, select_query)
        print("Students after deletion:")
        for row in cursor:
            print(row)

        # 关闭连接
        conn.close()
    else:
        print("Error! cannot create the database connection.")

if __name__ == '__main__':
    main()

在这个示例中,我们创建了一个名为testdb的数据库(假设它已经存在,或者MySQL服务器配置为允许创建新数据库),并在其中创建了一个students表。我们插入了一条记录,然后更新了这条记录中的age字段,接着查询了表中的所有记录,并打印了它们。最后,我们删除了之前插入的记录,并再次查询表以验证删除操作。

请确保将your_usernameyour_password替换为你的MySQL用户名和密码,以及根据你的环境调整数据库名称(如果需要的话)。

这个示例展示了如何在Python中执行基本的CRUD(创建、读取、更新、删除)操作,这是数据库编程中最常见的任务。


学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、机器学习、自动化测试带你从零基础系统性的学好Python!

👉[[CSDN大礼包:《python安装工具&全套学习资料》免费分享]](安全链接,放心点击

👉Python学习大礼包👈

👉Python副业兼职路线👈

在这里插入图片描述
在这里插入图片描述
完整源码和Python学习资料
扫描下方二维码无偿领取源码还有案例↓ ↓ ↓
在这里插入图片描述

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

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

相关文章

高频面试题:SpringMVC的执行流程

SpringMVC一直以来都是面试中的重点,尽管随着近年来springboot和微服务的广泛流行,关于对springMVC的考察比重略有下降,但依然是面试中的重点,也需要我们对其有一个比较清楚和全面的认识。 如果将java的发展史中重要的组件进行排…

备忘录模式 详解

备忘录模式 简介: 保存一个对象的某个状态,以便在适当的时候恢复对象, 允许在不破坏封装性的前提下,捕获和恢复对象的内部状态。 场景: 很多地方都用到了备忘录模式, 比如网络消息的序列化和反序列化, 数据的本地保存与加载等, 最简单的json的dump和loa…

全能与专精:探索AI模型的未来之路

AI模型:追求全能还是专精? 近日,OpenAI预计在秋季推出代号为“草莓”的新AI。从专注于数学问题到处理主观营销策略,"草莓"模型展现出惊人的多样性。而这种全能型 AI 是否代表了未来趋势?相比专攻于某一领域…

OpenAI 将于今年秋天推出新的先进“Strawberry草莓”生成式人工智能产品

今年秋季,OpenAI将推出一款备受瞩目的新型生成式人工智能产品——“草莓”。据悉,这款名为“草莓”的AI程序将带来一系列创新突破,它将大幅提升人工智能处理复杂数学题、执行战略任务以及深入探索各种主题的能力,而这一切无需依赖…

前景堪忧?SaaS巨头Salesforce,25年辉煌后能否继续领跑市场?

最近,时常听到有人说Salesforce失去了活力,这或许是对整个生态系统的普遍感受。多年来,Salesforce一直保持着巨大的发展势头,通过收购、创新和建立良好的合作伙伴关系已发展成为云计算行业巨头。在经历了近25年创纪录的增长和创新…

记Spring HTTP Invoker远程调用的使用(二)基于Servlet方式,配置servlet映射url-pattern实现

目录 前言 一、概念 二、代码实现 1. 服务端实现 2. 客户端实现 前言 本篇接上一篇记Spring HTTP Invoker远程调用的使用(一)基于Url映射方式,DispatcherServlet统一处理实现-CSDN博客https://blog.csdn.net/u011529483/article/details/141…

论文解读:Prompt-aligned Gradient for Prompt Tuning

摘要 得益于CLIP等大型预训练的视觉语言模型VLM,我们可以通过离散的提示设计构建Zero-shot分类器,例如,利用图像与提示语句" a photo of a [ CLASS ] "之间的相似度,可以获得图像属于某个类别的置信度分数。此外&#…

【Material UI】Select组件的Customization详解

文章目录 一、Customization的基本概念1. 什么是Customization?2. 为什么要定制化Select组件? 二、定制化InputBase组件1. 定制化InputBase的步骤2. 定制化Select组件3. NativeSelect的定制化 三、Customization的最佳实践1. 使用标准变体(St…

JAVA后端框架【spring】--超详解

什么是spring? spring是一个轻量级的ioc和Aop的一站式java开发框架,简化企业级开发 轻量级:框架体积小(核心模块) IOC IOC:inversion of control 控制反转 把创建对象的控制权反转给spring框架 AOP Aop:面向切面编程 将程…

HarmonyOS( Beta5版)鸿蒙开发:应用冷启动与加载绘制首页

应用冷启动即当启动应用时,后台没有该应用的进程,这时系统会重新创建一个新的进程分配给该应用。 应用冷启动过程大致可分成以下四个阶段:应用进程创建&初始化、Application&Ability初始化、Ability生命周期、加载绘制首页。 加载绘…

常用Pandas操作(笔记整理)

目录 一、常用 1、创建DataFrame(数据导入) 2. 查看数据前⼏⾏(head) 3. 查看数据后⼏⾏(tail) 4. 查看数据基本信息(info) 5. 使⽤ value_counts 计算唯⼀值的频率 6. 描述性…

SpringBoot 3.x+Mybatis Plus多数据源极简配置

1. 创建项目 创建一个名为mybatis-plus-demo的项目,使用MavenJDK17。不会的请看 IntelliJ IDEA快速创建Spring Boot项目,最终项目结构,如下图。 2. 编写代码 根据最终项目结构,从下往上依次列出各个文件的代码。 2.1 pom.xml…

迷雾大陆攻略:VMOS云手机流派辅助和技能加持助力!

在《迷雾大陆》这款游戏中,选择一个合适的流派和技能加点至关重要。使用VMOS云手机,玩家可以享受到专属定制的云手机,内置游戏安装包,无需重新下载安装游戏。同时,VMOS云手机能够24小时不间断运行,自动完成…

STM32(F103ZET6)第二十课:FreeRtos操作系统的应用

目录 调试方式一、任务堆栈溢出检测二、任务管理方式三、二值信号量(任务同步)四、计数信号量五、互斥信号量六、队列 调试方式 问题:传感器数据获取问题,有的DHT11能获取到,有的获取不到 两种方式:调优先级或者进临界区&#xf…

Docker原理及实例

目录 一 Docker简介及部署方法 1.1 Docker简介 1.1.1 什么是docker? 1.1.2 docker在企业中的应用场景 1.1.3 docker与虚拟化的对比 1.1.4 docker的优势 2 部署docker 2.1 容器工作方法 2.2 部署第一个容器 2.2.1 配置软件仓库 2.2.2 安装docker-ce并启动服…

排序算法见解(2)

1.快速排序 1.1基本思想: 快速排序是通过一趟排序将待排序的数据分割成独立的两部分,其中一部分的所有数据都比另一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以…

如何构建Java SpringBoot文献检索系统:高效管理学术资料,掌握数据库核心技术

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

搭上“跨境电商”便车,中国家居在海外越杀越勇

文|新熔财经 作者|楷楷 从去年至今,已有多家跨境家居企业谋求IPO,包括近期启动IPO辅导的圣奥科技;今年4月正式向港交所递交招股说明书的傲基科技;去年11月启动A股IPO的跨境家居品牌杰西亚,还有…

vulhub xxe靶机通关教程

首先我们进行端口扫描 扫出来端口之后去尝试得出地址为183 发现robots.txt文件 由此我们就得到了两个目录 我们先进入xxe目录&#xff0c;并开始登录抓包 并进入重放器在xml里面构造语句 <!DOCTYPE r [ <!ELEMENT r ANY > <!ENTITY admin SYSTEM "php://filt…

【在Linux世界中追寻伟大的One Piece】传输层协议UDP

目录 1 -> 传输层 2 -> 端口号 2.1 -> 端口号范围划分 2.2 -> 知名端口号 3 -> UDP协议 3.1 -> UDP协议端格式 3.2 -> UDP的特点 3.2.1 -> 面向数据报 3.3 -> UDP的缓冲区 3.4 -> UDP使用注意事项 3.5 -> 基于UDP的应用层协议 1 -…