Python实战MySQL:数据库操作全流程详解

9eddd52aede278b3c2f14f1d52055033.png

更多Python学习内容:ipengtao.com

MySQL是一种广泛使用的关系型数据库管理系统,Python可以通过多种方式与MySQL进行交互。本文将详细介绍如何使用Python操作MySQL数据库,包括安装必要的库、连接数据库、执行基本的CRUD(创建、读取、更新、删除)操作,并包含具体的示例代码,帮助全面掌握这一过程。

准备工作

安装MySQL服务器

首先,需要安装MySQL服务器。如果还没有安装,可以从MySQL官网下载并安装适合操作系统的版本。

安装Python MySQL驱动

为了使Python能够与MySQL数据库进行交互,我们需要安装一个MySQL驱动。常用的MySQL驱动有mysql-connector-pythonPyMySQL。这里以mysql-connector-python为例。

使用以下命令安装mysql-connector-python

pip install mysql-connector-python

连接到MySQL数据库

安装好驱动后,可以使用Python连接到MySQL数据库。

import mysql.connector

def connect_to_mysql():
    try:
        connection = mysql.connector.connect(
            host='localhost',
            user='your_username',
            password='your_password',
            database='your_database'
        )
        if connection.is_connected():
            print("成功连接到数据库")
            return connection
    except mysql.connector.Error as err:
        print(f"连接错误: {err}")
        return None

# 示例
connection = connect_to_mysql()
if connection:
    connection.close()

在这个示例中,定义了一个connect_to_mysql函数,用于连接到MySQL数据库。请根据实际数据库信息替换hostuserpassworddatabase参数。

创建数据库和表

创建数据库

在使用数据库之前,需要先创建一个数据库。

def create_database(cursor, database_name):
    try:
        cursor.execute(f"CREATE DATABASE {database_name}")
        print(f"数据库 {database_name} 创建成功")
    except mysql.connector.Error as err:
        print(f"创建数据库错误: {err}")

# 示例
connection = connect_to_mysql()
if connection:
    cursor = connection.cursor()
    create_database(cursor, 'test_db')
    cursor.close()
    connection.close()

创建表

接下来,在数据库中创建一个表。

def create_table(cursor, table_name):
    create_table_query = f"""
    CREATE TABLE {table_name} (
        id INT AUTO_INCREMENT PRIMARY KEY,
        name VARCHAR(255) NOT NULL,
        age INT,
        gender VARCHAR(10)
    )
    """
    try:
        cursor.execute(create_table_query)
        print(f"表 {table_name} 创建成功")
    except mysql.connector.Error as err:
        print(f"创建表错误: {err}")

# 示例
connection = connect_to_mysql()
if connection:
    cursor = connection.cursor()
    cursor.execute("USE test_db")
    create_table(cursor, 'persons')
    cursor.close()
    connection.close()

插入数据

插入单条数据

可以使用INSERT INTO语句向表中插入数据。

def insert_data(cursor, table_name, name, age, gender):
    insert_query = f"INSERT INTO {table_name} (name, age, gender) VALUES (%s, %s, %s)"
    data = (name, age, gender)
    try:
        cursor.execute(insert_query, data)
        print("数据插入成功")
    except mysql.connector.Error as err:
        print(f"插入数据错误: {err}")

# 示例
connection = connect_to_mysql()
if connection:
    cursor = connection.cursor()
    cursor.execute("USE test_db")
    insert_data(cursor, 'persons', 'Alice', 30, 'Female')
    connection.commit()
    cursor.close()
    connection.close()

插入多条数据

也可以一次插入多条数据。

def insert_multiple_data(cursor, table_name, data_list):
    insert_query = f"INSERT INTO {table_name} (name, age, gender) VALUES (%s, %s, %s)"
    try:
        cursor.executemany(insert_query, data_list)
        print("多条数据插入成功")
    except mysql.connector.Error as err:
        print(f"插入数据错误: {err}")

# 示例
data_list = [
    ('Bob', 25, 'Male'),
    ('Charlie', 28, 'Male'),
    ('Diana', 22, 'Female')
]

connection = connect_to_mysql()
if connection:
    cursor = connection.cursor()
    cursor.execute("USE test_db")
    insert_multiple_data(cursor, 'persons', data_list)
    connection.commit()
    cursor.close()
    connection.close()

查询数据

查询所有数据

可以使用SELECT语句查询表中的所有数据。

def query_all_data(cursor, table_name):
    query = f"SELECT * FROM {table_name}"
    try:
        cursor.execute(query)
        results = cursor.fetchall()
        for row in results:
            print(row)
    except mysql.connector.Error as err:
        print(f"查询数据错误: {err}")

# 示例
connection = connect_to_mysql()
if connection:
    cursor = connection.cursor()
    cursor.execute("USE test_db")
    query_all_data(cursor, 'persons')
    cursor.close()
    connection.close()

条件查询

可以使用条件查询从表中获取特定的数据。

def query_data_with_condition(cursor, table_name, condition):
    query = f"SELECT * FROM {table_name} WHERE {condition}"
    try:
        cursor.execute(query)
        results = cursor.fetchall()
        for row in results:
            print(row)
    except mysql.connector.Error as err:
        print(f"查询数据错误: {err}")

# 示例
connection = connect_to_mysql()
if connection:
    cursor = connection.cursor()
    cursor.execute("USE test_db")
    query_data_with_condition(cursor, 'persons', "age > 25")
    cursor.close()
    connection.close()

更新数据

可以使用UPDATE语句更新表中的数据。

def update_data(cursor, table_name, set_clause, condition):
    update_query = f"UPDATE {table_name} SET {set_clause} WHERE {condition}"
    try:
        cursor.execute(update_query)
        print("数据更新成功")
    except mysql.connector.Error as err:
        print(f"更新数据错误: {err}")

# 示例
connection = connect_to_mysql()
if connection:
    cursor = connection.cursor()
    cursor.execute("USE test_db")
    update_data(cursor, 'persons', "age = 31", "name = 'Alice'")
    connection.commit()
    cursor.close()
    connection.close()

删除数据

可以使用DELETE语句删除表中的数据。

def delete_data(cursor, table_name, condition):
    delete_query = f"DELETE FROM {table_name} WHERE {condition}"
    try:
        cursor.execute(delete_query)
        print("数据删除成功")
    except mysql.connector.Error as err:
        print(f"删除数据错误: {err}")

# 示例
connection = connect_to_mysql()
if connection:
    cursor = connection.cursor()
    cursor.execute("USE test_db")
    delete_data(cursor, 'persons', "name = 'Diana'")
    connection.commit()
    cursor.close()
    connection.close()

关闭数据库连接

完成所有操作后,需要关闭数据库连接。

connection.close()
print("数据库连接已关闭")

总结

本文详细介绍了如何使用Python操作MySQL数据库,包括连接数据库、创建数据库和表、插入数据、查询数据、更新数据和删除数据。通过安装MySQL服务器和Python MySQL驱动,可以轻松地在Python中实现与MySQL的交互。文章提供了详细的示例代码,展示了如何执行基本的CRUD操作,帮助大家掌握在实际项目中高效管理和操作数据库的技巧。通过这些示例,可以学会在Python中实现数据库操作,提高数据处理的效率和可靠性。

如果你觉得文章还不错,请大家 点赞、分享、留言 下,因为这将是我持续输出更多优质文章的最强动力!


如果想要系统学习Python、Python问题咨询,或者考虑做一些工作以外的副业,都可以扫描二维码添加微信,围观朋友圈一起交流学习。

278d1ff566ab289aebf5437b5f0d16a6.gif

我们还为大家准备了Python资料和副业项目合集,感兴趣的小伙伴快来找我领取一起交流学习哦!

11b2c3bf94e817960fa253e1d4328728.jpeg

往期推荐

历时一个月整理的 Python 爬虫学习手册全集PDF(免费开放下载)

Python基础学习常见的100个问题.pdf(附答案)

学习 数据结构与算法,这是我见过最友好的教程!(PDF免费下载)

Python办公自动化完全指南(免费PDF)

Python Web 开发常见的100个问题.PDF

肝了一周,整理了Python 从0到1学习路线(附思维导图和PDF下载)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JAVA String类最全分析

一、介绍 StringSerializable实现它,String可以串行化,可以在网络上传输ComparableString对象可以相互比较CharSequenceObject String class Main{public static void main(String[] args) {//1.String 对象用于保存字符串,也就是一组字符…

Android ImageDecoder把瘦高/扁平大图相当于fitCenter模式decode成目标小尺寸Bitmap,Kotlin

Android ImageDecoder把瘦高/扁平大图相当于fitCenter模式decode成目标小尺寸Bitmap,Kotlin val sz Size(MainActivity.SIZE, MainActivity.SIZE)val src ImageDecoder.createSource(mContext?.contentResolver!!, uri)val bitmap ImageDecoder.decodeBitmap(sr…

MySQL更新和删除(DML)

DML-修改数据 UPDATE 表名 SET 字段1 值1,字段2值2,....[WHERE 条件] 例如 1.这个就是把employee表中的这个name字段里面并且id字段为1的名字改为itheima update employee set nameitheima where id 1; 2.这个就是把employee这个表中的name字段和…

SpringMVC源码分析

文章目录 概要启动阶段请求阶段 概要 以下是调试mvc源码过程中用到的demo以及配置文件 webapp/WEB-INF/web.xml <?xml version"1.0" encoding"UTF-8"?> <web-app xmlns"http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi"http://…

熊海CMS漏洞练习平台的一次xss、sql注入、越权黑盒思路分析

简介 熊海CMS是由熊海开发的一款功能丰富的网站综合管理系统&#xff0c;广泛应用于个人博客、个人网站以及企业网站&#xff0c;本文章用于黑盒测试&#xff0c;如果需要「源码审计」后台回复【「CMS」】获取即可&#xff0c;精心准备了40多个cms源码漏洞平台&#xff0c;供宝…

记一次docker容器安装MySQL,navicat无法连接报错(10060错误)

今天在云服务器上使用docker部署mysql 8.0.11时&#xff0c;遇到了一个诡异的问题&#xff0c;在云服务器的docker容器内可以连接上mysql&#xff0c;然而在自己电脑上连接mysql时报错&#xff1a;Can‘t connect to MySQL server on localhost (10060) 下面是网上搜寻的几种可…

《SpringBoot 整合 Prometheus 采集自定义指标》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; 近期刚转战 CSDN&#xff0c;会严格把控文章质量&#xff0c;绝不滥竽充数&#xff0c;如需交流&#xff…

C语言 ——— const关键字

目录 const修饰变量 const修饰指针变量 const放在指针类型之前 const放在指针类型之后 小结 const修饰变量 当 const 修饰 int类型 的 变量a 后&#xff0c;此时的 变量a 就具有长属性&#xff0c;就不能被赋值为其他的值 将 变量a的地址 存储到 指针变量pa 中&#xff…

计算机网络——常见问题汇总

1. introduction 1.1 Explain what a communication protocol is and why its important. A communication protocol is a set of rules and conventions(公约) that govern(统治) how data is transmitted and received between devices(设备), systems, or entities in a ne…

1、BOREDHACKERBLOG:社交网络

靶机&#xff1a;https://www.vulnhub.com/entry/boredhackerblog-social-network,454/ 参考&#xff1a;Vulnhub靶机&#xff1a;BOREDHACKERBLOG: SOCIAL NETWORK_boredhackerblog系列-CSDN博客 需要使用virtualbox。 先去官网下载了最新版的vietualbox&#xff0c;以及把这…

使用 Unstructured.io 和 Elasticsearch 向量数据库搜索复杂文档

作者&#xff1a;来自 Elastic Amy Ghate, Rishikesh Radhakrishnan, Hemant Malik 使用非结构化和 Elasticsearch 向量数据库为 RAG 应用程序提取和搜索复杂的专有文档 在使信息可搜索之前解析文档是构建实际 RAG 应用程序的重要步骤。Unstructured.io 和 Elasticsearch 在此…

Admin.NET源码学习(2:安装并运行前端)

根据Admin.NET的GitHub主页介绍&#xff0c;前端运行步骤需要运行pnpm命令。百度pnpm的话&#xff0c;需要支持npm相关的命令支持。   根据参考文献4&#xff0c;安装Node.js后会提供npm命令支持&#xff08;npm是Node.js的软件包管理器&#xff0c;用于安装、发布和共享Jav…

FreeRTOS 入门 知识

什么是FreeRTOS FreeRTOS 是一个轻量级的实时操作系统&#xff08;RTOS&#xff09;&#xff0c;由 Richard Barry 在 2003 年开发&#xff0c;并且由亚马逊的 FreeRTOS 项目&#xff08;一个由 Amazon Web Services (AWS) 支持的开源项目&#xff09;进一步推动和发展。FreeR…

顺序表算法 - 合并两个有序数组

88. 合并两个有序数组 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/merge-sorted-array/description/思路: void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n) {int l1,l2,l3;l1 m-1;l2 n-1;l3 mn-1;//l1和l2大于…

DispatcherServlet懒加载带来的问题和思考

问题 DispatcherServlet的懒加载会导致在用户在进行第一次请求的时候会比正常慢很多&#xff0c;如果这个时候大量请求同时过来&#xff0c;那么阻塞和cpu的暴增就会显而易见。 背景 在回顾SpringMvc对servlet的增强的过程中&#xff0c;突然发现DispatcherServlet是懒加载的…

7.2 AQS原理

AQS 原理 概述 全称是 AbstractQueuedSynchronizer&#xff0c;是阻塞式锁和相关的同步器工具的框架。 特点&#xff1a; 用 state 属性来表示资源的状态&#xff08;分独占模式和共享模式&#xff09;&#xff0c;子类需要定义如何维护这个状态&#xff0c;控制如何获取锁和…

JAVA自定义注释

interface 声明 package test; public interface InProgress { } InProgress public void calculateInterest(float amount, float rate) { } 带成员 public interface TODO {String value(); } InProgress //只有成员变量名有value时&#xff0c;值有给value赋值时可以这…

redis源码分析之底层数据结构(一)-动态字符串sds

1.绪论 我们知道redis是由c语言实现的&#xff0c;c语言中是自带字符串的&#xff0c;但是为什么redis还要再实现自己的动态字符串呢&#xff0c;这种动态字符串的底层数据结构是怎样的呢?接下来我们带着这些问题来看一看redis中的动态字符串sds。 2.sds的组成 struct __at…

MySQL覆盖索引和索引跳跃扫描

最近在深入学习MySQL&#xff0c;在学习最左匹配原则的时候&#xff0c;遇到了一个有意思的事情。请听我细细道来。 我的MySQL版本为8.0.32 可以通过 show variables like version; 查看使用的版本。 准备工作&#xff1a; 先建表&#xff0c;SQL语句如下&#xff1a; c…