当前位置: 首页 > article >正文

Python与SQL深度融合实战案例:打造你的数据处理秘籍

今天,我们将通过一个实战案例,揭开Python与SQL在数据生成、入库、映射处理中的神秘面纱,让你的数据处理之路事半功倍!

一、用Python点燃数据魔法——生成随机数据与映射

首先,让我们借助Python的pandas和numpy库,快速生成一组随机数据,并通过字典映射为数据添加“魔法”值。

# 导入必要的库
import pandas as pd
import numpy as np

# 设定数据规模:生成20个随机整数
data_size = 20
column1_values = np.random.randint(1, 50, data_size)  # 生成1到50之间的随机整数

# 用DataFrame存储数据,并命名列为 'Column1'
df = pd.DataFrame({'Column1': column1_values})

# 定义映射关系:特定数字映射到对应金额
price_mapping = {6: 30, 16: 30, 42: 30, 4: 20, 36: 20, 15: 10, 11: 100}

# 利用map方法,将映射结果赋值到新列 'Column2';未匹配的自动填充为0
df['Column2'] = df['Column1'].map(price_mapping).fillna(0)

# 展示结果
print(df)

这段代码展示了如何通过简单几步,利用Python生成随机数据,并依据预设的映射关系为数据赋予全新的含义——这正是你掌控数据的第一步魔法!

图片

二、轻松驾驭SQL——将数据稳稳入库

接下来,借助SQL语句,我们将数据“送进”数据库,让它们有个温暖的家。假设我们有两个表:

  1. shuju 表的建表及数据插入 假设表结构如下:

CREATE TABLE shuju (
    id INT AUTO_INCREMENT PRIMARY KEY,
    Column1 INT
);
我们通过下面的INSERT语句,为表中填入示例数据:

INSERT INTO shuju (Column1) VALUES
(6),
(16),
(42),
(4),
(36),
(15),
(11),
(7),
(9),
(18),
(21),
(30),
(8),
(14),
(3),
(19),
(25),
(13),
(22),
(17);

数据库中执行上面脚本:

图片

  1. mapping 表的建表及数据插入 同样,创建映射表的结构如下:

CREATE TABLE mapping (
    value INT PRIMARY KEY,
    price INT
);

并插入相应的映射数据:

INSERT INTO mapping (value, price) VALUES
(6, 30),
(16, 30),
(42, 30),
(4, 20),
(36, 20),
(15, 10),
(11, 100);

数据库中执行上面脚本:

图片

这两组SQL语句不仅展示了如何构建数据库表,更展示了如何将数据井然有序地存储到数据库中,为后续的数据映射操作打下坚实基础。

三、数据回流——Python读取数据库并精准映射

最后一步,我们再用Python将数据从数据库中读取回来,并根据数据库中的映射规则,将金额数据准确映射到原始数据上。操作如下:

import pandas as pd
import pymysql
from sqlalchemy import create_engine, text

# 数据库配置
db_config = { 
    'host': 'localhost',
    'user': 'root',
    'password': 'root',
    'database': 'demo2',
    'port': 3306,
    'charset': 'utf8mb4'
}

try:
    # 创建数据库连接引擎
    engine = create_engine(
        f"mysql+pymysql://{db_config['user']}:{db_config['password']}@"
        f"{db_config['host']}:{db_config['port']}/{db_config['database']}?charset={db_config['charset']}"
    )
    
    with engine.connect() as conn:
        # 测试数据库连接是否成功(使用 text 包装 SQL 语句)
        result = conn.execute(text("SELECT 1"))
        print("测试连接结果:", result.fetchone())
        
        # 使用 execute 获取 SHOW COLUMNS 信息,并手动构造 DataFrame
        result_shuju = conn.execute(text("SHOW COLUMNS FROM shuju;"))
        shuju_columns = pd.DataFrame(result_shuju.fetchall(), columns=result_shuju.keys())
        
        result_mapping = conn.execute(text("SHOW COLUMNS FROM mapping;"))
        mapping_columns = pd.DataFrame(result_mapping.fetchall(), columns=result_mapping.keys())
        
        print("shuju 表字段:")
        print(shuju_columns)
        print("mapping 表字段:")
        print(mapping_columns)
        
        # 执行查询并获取结果
        result_data = conn.execute(text("SELECT * FROM shuju;"))
        result_mapping = conn.execute(text("SELECT value, price FROM mapping;"))
        
        # 使用 fetchall 和 DataFrame 构造函数创建 DataFrame
        df_data = pd.DataFrame(result_data.fetchall(), columns=result_data.keys())
        df_mapping = pd.DataFrame(result_mapping.fetchall(), columns=result_mapping.keys())
    
    # 检查 shuju 表中是否包含 'Column1' 列
    if'Column1'notin df_data.columns:
        raise KeyError("shuju 表中不存在 'Column1' 列,请检查表结构和列名。")
    
    # 将 mapping 表数据转换为字典(如果 value 列有重复值,字典中只保留最后一条对应关系)
    price_mapping = pd.Series(df_mapping['price'].values, index=df_mapping['value']).to_dict()
    
    # 根据映射关系为 df_data 添加新列 'Column2'
    df_data['Column2'] = df_data['Column1'].map(price_mapping).fillna(0)
    
    # 输出最终结果
    print("最终结果:")
    print(df_data)

except Exception as e:
    print("操作失败,错误信息:", str(e))
finally:
    engine.dispose()  # 关闭数据库连接

通过这一系列操作,我们不仅见证了数据从Python生成、存储到数据库,再回流至Python的全过程,更体验到了数据映射的高效与便捷。无论是数据清洗、报表生成还是复杂分析,Python与SQL的强强联合都能为你打开全新的大门!


http://www.kler.cn/a/579245.html

相关文章:

  • firewalld富规则配置黑名单
  • 小程序事件系统 —— 34 事件传参 - mark - 自定义数据
  • NXP MPC574x EE模拟-数据结构
  • VBA信息获取与处理第五节:如何在单个工作表中查找某个给定值
  • JAVA入门——网络编程简介
  • 游戏引擎学习第141天
  • 蓝桥杯 砍柴
  • 2025科技项目申报预测月历来啦!
  • 【AI】AI开源IDE:CLine源码分析报告
  • 达梦数据库导入数据,通过命令的方式
  • Windows 11下Git Bash执行cURL脚本400问题、CMD/PowerShell不能执行多行文本等问题记录及解决方案
  • V8引擎中的垃圾回收机制如何工作?
  • 删除或替换 Word 中的首页、尾页以及其它指定范围的页
  • 周末总结(2024/03/08)
  • 《C++ 构造、拷贝构造与析构函数:对象的诞生、克隆与消逝之旅》
  • 使用joblib 多线程/多进程
  • WPF基础知识41-60
  • 【新人系列】Golang 入门(三):条件循环
  • P8641 [蓝桥杯 2016 国 C] 赢球票--环形结构问题
  • 深入理解人脸特征向量及图片转换方法与开发架构