知识周汇 | MySQL增删改查与Python连接

目录

前言

1 Mysql增删改查

1.1 创建表

1.2 插入数据

插入单条数据:

插入多条数据:

1.3 查询数据

查询所有数据:

查询特定字段:

带条件查询:

排序查询:

分页查询:

1.4 更新数据

更新单条数据:

更新多条数据:

1.5 删除数据

删除特定数据:

删除所有数据:

1.6 删除表

1.7 完整示例

2 Mysql与python连接

2.0代码示例

2.1 导入模块

2.2 数据库连接配置

2.3 创建连接池

2.4 定义 UserDao 类

2.5 定义 select_infro_from_user 方法

2.6 调用 UserDao 类的方法

3 总结与思考


前言

MySQL 是用于存储数据的核心工具,正如掌握列表和字典一样,熟练掌握其最基本的增删改查操作是必不可少的。此外,学会用 Python 连接 MySQL 更是关键一步,它意味着我们可以直接访问服务器中的数据,并借助 Pandas 实现自动化分析,这无疑是数据分析中的重要环节。

1 Mysql增删改查

在编写 MySQL 增删改查代码时,我们通常使用 Navicat 进行练习。如果你还不熟悉如何用 Navicat 连接 MySQL,可以参考之前的文章:

知识周汇|Mysql和Navicat安装教程

以下操作的前提是 Navicat 已成功连接 MySQL。首先,在 Navicat 中新建一个数据库 test,双击打开 test 数据库后,即可在查询窗口中编写和执行 SQL 语句。

1.1 创建表

在 MySQL 中,使用 CREATE TABLE 语句创建表。

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,  -- 自增主键
    name VARCHAR(50) NOT NULL,         -- 姓名,不能为空
    age INT,                           -- 年龄
    email VARCHAR(100) UNIQUE          -- 邮箱,唯一
);

1.2 插入数据

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

插入单条数据:

INSERT INTO users (name, age, email)
VALUES ('Alice', 25, 'alice@example.com');

插入多条数据:

INSERT INTO users (name, age, email)
VALUES 
    ('Bob', 22, 'bob@example.com'),
    ('Charlie', 28, 'charlie@example.com');

1.3 查询数据

使用 SELECT 语句查询数据。

查询所有数据:

SELECT * FROM users;

查询特定字段:

SELECT name, email FROM users;

带条件查询:

SELECT * FROM users WHERE age > 25;

排序查询:

SELECT * FROM users ORDER BY age DESC;  -- 按年龄降序

分页查询:

SELECT * FROM users LIMIT 2 OFFSET 1;  -- 跳过 1 条,返回 2 条

1.4 更新数据

使用 UPDATE 语句更新数据。

更新单条数据:

UPDATE users
SET age = 26
WHERE name = 'Alice';

更新多条数据:

UPDATE users
SET age = age + 1  -- 年龄加 1
WHERE age < 25;

1.5 删除数据

使用 DELETE 语句删除数据。

删除特定数据:

DELETE FROM users
WHERE name = 'Bob';

删除所有数据:

DELETE FROM users;  -- 清空表

1.6 删除表

使用 DROP TABLE 语句删除表。

DROP TABLE users;  -- 删除表及其数据

1.7 完整示例

以下是一个完整的示例,包括创建表、插入数据、查询、更新和删除操作:

-- 创建表
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    age INT,
    email VARCHAR(100) UNIQUE
);

-- 插入数据
INSERT INTO users (name, age, email)
VALUES 
    ('Alice', 25, 'alice@example.com'),
    ('Bob', 22, 'bob@example.com'),
    ('Charlie', 28, 'charlie@example.com');

-- 查询数据
SELECT * FROM users;

-- 更新数据
UPDATE users
SET age = 26
WHERE name = 'Alice';

-- 删除数据
DELETE FROM users
WHERE name = 'Bob';

-- 删除表
DROP TABLE users;

2 Mysql与python连接

ysql-connector-python 是 MySQL 官方提供的 Python 驱动程序,用于在 Python 程序中连接和操作 MySQL 数据库。以下是安装方式

 pip install mysql-connector-python -i https://mirrors.aliyun.com/pypi/simple

Python与MySQL的连接,实质上是借助Python的数据库驱动来执行SQL语句,进而管理和操作数据库中的数据,以下是一个示例

2.0代码示例

# coding=utf-8


import mysql.connector.pooling

# 本地数据库
__config = {
    "host": "localhost",
    "port": 3306,
    "user": "root",
    "password": "XXXXX",
    "database": "test"
}

try:
    pool = mysql.connector.pooling.MySQLConnectionPool(
        **__config,
        pool_size=10
    )
except Exception as e:
    print(e)


class UserDao():
    def select_infro_from_user(self):
        sql = "SELECT id ,name,age,email FROM users;"

        print(sql)
        try:
            con = pool.get_connection()
            cursor = con.cursor()
            cursor.execute(sql)
            result = cursor.fetchall()
            return result
        except Exception as e:
            if "con" in dir():
                con.rollback()
        finally:
            if "con" in dir():
                con.close()


result = UserDao().select_infro_from_user()
print(result)

上述代码逻辑结构

  1. 导入模块: 导入MySQL连接池模块。

  2. 配置数据库连接: 定义数据库连接的配置信息。

  3. 创建连接池: 使用配置信息创建MySQL连接池。

  4. 定义 UserDao 类: 封装与用户相关的数据库操作。

  5. 定义 select_infro_from_user 方法: 查询users表中的用户信息。

  6. 调用方法并打印结果: 调用UserDao类的方法,获取查询结果并打印。

2.1 导入模块

import mysql.connector.pooling
  • 作用: 导入MySQL连接池模块。

  • 解释mysql.connector.pooling 是 mysql-connector-python 库中的一个模块,用于创建和管理数据库连接池。连接池可以提高数据库操作的效率,避免频繁创建和关闭连接。

2.2 数据库连接配置

# 本地数据库
__config = {
    "host": "localhost",
    "port": 3306,
    "user": "root",
    "password": "1901xxx",
    "database": "test"
}
  • 作用: 定义数据库连接的配置信息。

  • 解释:

    • "host": "localhost": 数据库服务器地址,这里是本地主机。

    • "port": 3306: 数据库端口号,MySQL默认端口是3306。

    • "user": "root": 数据库用户名,这里是root

    • "password": "1901xxx": 数据库密码。

    • "database": "test": 要连接的数据库名称,这里是test

2.3 创建连接池

try:
    pool = mysql.connector.pooling.MySQLConnectionPool(
        **__config,
        pool_size=10
    )
except Exception as e:
    print(e)
  • 作用: 创建MySQL连接池。

  • 解释:

    • **__config: 将__config字典解包为关键字参数,传递给MySQLConnectionPool

    • pool_size=10: 设置连接池的大小为10,即最多可以同时存在10个数据库连接。

    • try-except块: 捕获创建连接池时可能发生的异常,并打印错误信息。

2.4 定义 UserDao 类

class UserDao():
  • 作用: 定义一个名为UserDao的类。

  • 解释: 这个类封装了与用户相关的数据库操作。

2.5 定义 select_infro_from_user 方法

def select_infro_from_user(self):
    sql = "SELECT id ,name,age,email FROM users;"

    print(sql)
    try:
        con = pool.get_connection()
        cursor = con.cursor()
        cursor.execute(sql)
        result = cursor.fetchall()
        return result
    except Exception as e:
        if "con" in dir():
            con.rollback()
    finally:
        if "con" in dir():
            con.close()
  • 作用: 从users表中查询用户信息。

  • 解释:

    • sql = "SELECT id ,name,age,email FROM users;": 定义SQL查询语句,查询users表中的idnameageemail字段。

    • print(sql): 打印SQL语句,便于调试。

    • try-except-finally: 捕获并处理数据库操作中的异常。

      • con = pool.get_connection(): 从连接池中获取一个数据库连接。

      • cursor = con.cursor(): 创建一个游标对象,用于执行SQL语句。

      • cursor.execute(sql): 执行SQL查询语句。

      • result = cursor.fetchall(): 获取查询结果的所有行。

      • return result: 返回查询结果。

      • except Exception as e:: 捕获异常并回滚事务。

      • finally:: 无论是否发生异常,最后都会关闭数据库连接。

2.6 调用 UserDao 类的方法

result = UserDao().select_infro_from_user()
print(result)
  • 作用: 调用UserDao类的select_infro_from_user方法,获取查询结果并打印。

  • 解释:

    • result = UserDao().select_infro_from_user(): 创建一个UserDao对象,并调用其select_infro_from_user方法,将查询结果存储在result变量中。

    • print(result): 打印查询结果,便于查看。

3 总结与思考

MySQL 是数据存储和管理的核心工具,熟练掌握其增删改查操作是数据分析的基础。通过 Python 连接 MySQL,可以实现自动化数据访问和处理,极大地提高数据分析的效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值