SQL查询电商数据案例

news2024/11/15 23:58:01

包括,Python连接数据库到模拟电商数据库,到sql场景查询

1,Python连接SQL数据库

以下是使用Python连接MySQL数据库并进行操作的示例代码:

import random
import time
import pymysql

# 定义名字数据
xing = ["王", "李", "张", "刘", "陈", "杨", "黄", "赵", "吴", "周"]
ming = ["伟", "芳", "娜", "敏", "静", "丽", "强", "磊", "军", "洋"]

# 连接数据库
conn = pymysql.connect(
    host="192.168.1.80",
    user="admin",
    password="123",
    database="management_systems",
    charset="utf8"
)
cursor = conn.cursor()

# 生成随机生日
a1 = (1980, 1, 1, 0, 0, 0, 0, 0, 0)
a2 = (2000, 12, 31, 23, 59, 59, 0, 0, 0)
start = time.mktime(a1)
end = time.mktime(a2)

# 插入学生数据
for i in range(1, 37):
    for j in range(1, 51):
        random_xing = random.randint(0, len(xing) - 1)
        random_ming = random.randint(0, len(ming) - 1)
        t = random.randint(start, end)
        date_t = time.localtime(t)
        birthday = time.strftime("%Y-%m-%d", date_t)
        sql = f"INSERT INTO student(class_id, student_name, student_birthday, sex) VALUES ({i}, '{xing[random_xing]}{ming[random_ming]}', '{birthday}', {random.randint(0, 1)})"
        cursor.execute(sql)

conn.commit()

# 查询数据
sql = """
SELECT 
    s.class_id, 
    c.class_name, 
    s.student_name, 
    s.student_birthday, 
    s.sex 
FROM 
    student s 
JOIN 
    class c 
ON 
    s.class_id = c.class_id
WHERE 
    s.student_birthday > '1990-01-01' 
ORDER BY 
    s.class_id, s.student_birthday;
"""
cursor.execute(sql)
result = cursor.fetchall()
for row in result:
    print(row)

# 关闭连接
cursor.close()
conn.close()

2,模拟数据库

假设我们有一个偏真实的电商数据库,其中包括以下几张主要数据表:

  • users:用户信息表
  • products:产品信息表
  • orders:订单表
  • order_items:订单详情表
  • reviews:产品评论表

以下是这些表的结构和部分复杂的SQL操作示例:

数据表结构

CREATE TABLE users (
    user_id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    email VARCHAR(100) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE products (
    product_id INT AUTO_INCREMENT PRIMARY KEY,
    product_name VARCHAR(100) NOT NULL,
    category VARCHAR(50),
    price DECIMAL(10, 2),
    stock INT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE orders (
    order_id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT,
    order_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    total_amount DECIMAL(10, 2),
    FOREIGN KEY (user_id) REFERENCES users(user_id)
);

CREATE TABLE order_items (
    order_item_id INT AUTO_INCREMENT PRIMARY KEY,
    order_id INT,
    product_id INT,
    quantity INT,
    price DECIMAL(10, 2),
    FOREIGN KEY (order_id) REFERENCES orders(order_id),
    FOREIGN KEY (product_id) REFERENCES products(product_id)
);

CREATE TABLE reviews (
    review_id INT AUTO_INCREMENT PRIMARY KEY,
    product_id INT,
    user_id INT,
    rating INT CHECK (rating BETWEEN 1 AND 5),
    comment TEXT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (product_id) REFERENCES products(product_id),
    FOREIGN KEY (user_id) REFERENCES users(user_id)
);

插入数据

import pymysql
import random
import time

# 连接数据库
conn = pymysql.connect(
    host="192.168.1.80",
    user="admin",
    password="123",
    database="ecommerce",
    charset="utf8"
)
cursor = conn.cursor()

# 插入用户数据
users = [("user1", "user1@example.com"), ("user2", "user2@example.com")]
for user in users:
    sql = f"INSERT INTO users(username, email) VALUES ('{user[0]}', '{user[1]}')"
    cursor.execute(sql)

# 插入产品数据
products = [("Product1", "Category1", 100.00, 10), ("Product2", "Category2", 200.00, 20)]
for product in products:
    sql = f"INSERT INTO products(product_name, category, price, stock) VALUES ('{product[0]}', '{product[1]}', {product[2]}, {product[3]})"
    cursor.execute(sql)

conn.commit()

# 插入订单和订单详情数据
order_data = [(1, '2024-01-01', 300.00), (2, '2024-01-02', 400.00)]
order_items_data = [(1, 1, 2, 100.00), (1, 2, 1, 200.00), (2, 1, 3, 300.00)]

for order in order_data:
    sql = f"INSERT INTO orders(user_id, order_date, total_amount) VALUES ({order[0]}, '{order[1]}', {order[2]})"
    cursor.execute(sql)

for item in order_items_data:
    sql = f"INSERT INTO order_items(order_id, product_id, quantity, price) VALUES ({item[0]}, {item[1]}, {item[2]}, {item[3]})"
    cursor.execute(sql)

conn.commit()

# 插入评论数据
reviews = [(1, 1, 5, "Excellent product!"), (2, 2, 4, "Very good.")]
for review in reviews:
    sql = f"INSERT INTO reviews(product_id, user_id, rating, comment) VALUES ({review[0]}, {review[1]}, {review[2]}, '{review[3]}')"
    cursor.execute(sql)

conn.commit()
cursor.close()
conn.close()

3,复杂查询示例

-- 查询每个用户的订单总金额及订单数量
SELECT 
    u.user_id, 
    u.username, 
    COUNT(o.order_id) AS order_count, 
    SUM(o.total_amount) AS total_spent 
FROM 
    users u 
LEFT JOIN 
    orders o 
ON 
    u.user_id = o.user_id 
GROUP BY 
    u.user_id, u.username;

-- 查询每个产品的平均评分及评论数量
SELECT 
    p.product_id, 
    p.product_name, 
    AVG(r.rating) AS average_rating, 
    COUNT(r.review_id) AS review_count 
FROM 
    products p 
LEFT JOIN 
    reviews r 
ON 
    p.product_id = r.product_id 
GROUP BY 
    p.product_id, p.product_name;

-- 查询订单详情,包含订单信息、用户信息及产品信息
SELECT 
    o.order_id, 
    u.username, 
    o.order_date, 
    p.product_name, 
    oi.quantity, 
    oi.price 
FROM 
    orders o 
JOIN 
    users u 
ON 
    o.user_id = u.user_id 
JOIN 
    order_items oi 
ON 
    o.order_id = oi.order_id 
JOIN 
    products p 
ON 
    oi.product_id = p.product_id;

-- 查询每个用户在每个类别上的花费总金额
SELECT 
    u.user_id, 
    u.username, 
    p.category, 
    SUM(oi.price * oi.quantity) AS total_spent 
FROM 
    users u 
JOIN 
    orders o 
ON 
    u.user_id = o.user_id 
JOIN 
    order_items oi 
ON 
    o.order_id = oi.order_id 
JOIN 
    products p 
ON 
    oi.product_id = p.product_id 
GROUP BY 
    u.user_id, u.username, p.category;

-- 查询在2024年每个月的销售总额和销售量
SELECT 
    YEAR(o.order_date) AS year, 
    MONTH(o.order_date) AS month, 
    SUM(oi.price * oi.quantity) AS total_sales, 
    SUM(oi.quantity) AS total_quantity 
FROM 
    orders o 
JOIN 
    order_items oi 
ON 
    o.order_id = oi.order_id 
WHERE 
    YEAR(o.order_date) = 2024 
GROUP BY 
    YEAR(o.order_date), MONTH(o.order_date);

通过这些示例,您可以看到如何使用Python连接数据库,生成和插入随机数据,以及进行复杂的SQL查询。

(交个朋友/技术接单/ai办公/性价比资源,注明来意)

e6dc3a6f9b5a4fb29434c33a001b09d0.png

 

 

 

 

 

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

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

相关文章

uni-app学习完结

昨天空余一天,并未写记录,是昨天属于项目完结,这里把最后的打包上线等这里说下。 打包成微信小程序 打包成微信小程序,这需要再微信公众平台里面,进行登陆和设置。这里说下,注册的后,选择需要…

文心智能体平台丨创建你的四六级学习小助手

引言 在人工智能飞速发展的今天,我们迎来了文心智能体平台。该平台集成了最先进的人工智能技术,旨在为用户提供个性化、高效的学习辅助服务。今天,我们将向大家介绍如何利用文心智能体平台,创建一个专属于你的四六级学习小助手。…

zabbix客户端启用ping脚本 , 采集结果返回服务端

1.Zabbix-agent配置 (1) 查看自定义配置的目录位置 # more /etc/zabbix/zabbix_agentd.conf (2) 将配置的脚本放在指定的目录下 # cd /etc/zabbix/zabbix_agentd.d # vi get_ping.conf UserParameter=get_ping[*], /bin/ping -c 1 -W 1 $1 &> /dev/null &a…

未在计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序和未在本地计算机上注册“microsoft.ACE.OLEDB.12.0”提供程序

程序运行出现下图的错误, 或者下图的错误, 首先看一下是不是运行的程序的位数(32/64)不对; 查看系统位数的方法如下图;下图显示是64位操作系统; 如果运行的程序的位数没有问题; 则需…

MySQL-innodb后台线程

文章目录 一、结构图二、后台线程①Master Thread②IO Thread③Purge Thread④Page Cleaner Thread 拓展知识 一、结构图 二、后台线程 InnoDB是多线程的模型,因此其后台有多个不同的后台线程,负责处理不同的任务 后台线程有: ①Master Thr…

BevDet(1): 算法原理介绍介绍

BevDet是一个LSS-Based的实时高性能的多相机3D检测模型,它用4阶段的范式去做3D目标检测,设计上同时支持Segmentation。何谓4阶段范式: 1.图像域的特征提取(Image -view Encoder)2.视角转换 (View Transformer)3.Bev空间特征提取(BEV Encoder)4.任务头Head它涉及 Image View …

【ai】livekit:Agents 3 : pythonsdk和livekit-agent的可编辑模式下的安装

livekit-agent 依赖于livekit、livekit-api、livekit-protocol 其中livekit就是livekkit-rtc: 包含俩sdk 实时互动sdkReal-time SDK for connecting to LiveKit as a participant livekit-api : 服务端sdk https://pypi.org/project/livekit-api/ livekit的python sdk

Plesk面板上网站无法访问如何查看日志

近期我的网站出现无法访问的问题,这边想要查询为什么出现无法访问的原因,但不知道如何在主机上面进行检查,由于我使用的Hostease的Windows虚拟主机产品默认带普通用户权限的Plesk面板,因此联系Hostease的咨询了Hostease技术支持&a…

嵌入式不一定只能用C!

嵌入式不一定只能用C! ---------------------------------------------------------------------------------------手动分割线-------------------------------------------------------------------------------- 本文章参考了以下文章: 这里是引用 ------------…

算法与数据结构高手养成:朴素的贪心法(上)最优化策略

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…

Linux离线一键安装Docker及docker-compose环境

背景: 在当前软件部署运维环境中由于Docker容器化优势越来越明显,因些被许多公司运维所采用,那首先如何快速安装Docker及docker-compose基础环境就第一时间被人们关注,本人同样在经过多次手工逐条用命令安装的过程,整理…

继承--5.29

继承格式: package javatest2;public class people {int age;double workday;public people(int age, double workday) {this.age age;this.workday workday;} }package javatest2;public class student extends people {int studyday;public student(int age, d…

使用目标检测模型YOLO V9 OBB进行旋转目标的检测:训练自己的数据集(基于卫星和无人机的农业大棚数据集)

我看到YOLO V8中(ultralytics版本8.2.18)集成了YOLO V9,所以直接在YOLO V8 OBB的基础上实现YOLO V9 OBB,训练结果也出来了,但是评估指标比YOLO V8 OBB低一点点,不知道是不是哪里遗漏修改了......如有大神赐…

开源DMS文档管理系统 Nuxeo Vs Alfresco对比及 API 使用概述

1. 文档管理系统是什么 文档管理系统(DMS:Document Management System)是一种软件系统,用于组织、存储、检索和管理电子文档和文件。这些文件可以是各种格式的电子文档,如文本文档、电子表格、图像、音频或视频文件等…

easy-rule规则引擎使用

简介 轻量级的规则引擎&#xff0c;易于学习的api 简单来说&#xff0c;规则引擎就是一个函数&#xff1a;yf(x1,x2,…,xn) 将业务代码和业务规则分离&#xff0c;解耦业务决策和业务代码的绑定关系 入门示例 依赖引入 <dependency><groupId>org.jeasy</grou…

3dmax渲染经常卡主?关掉光追即可流畅渲染

3ds Max是一款广泛应用于三维建模、动画和渲染的软件&#xff0c;它在影视、游戏、建筑可视化等领域具有重要地位。在3ds Max中&#xff0c;渲染技术的选择和应用直接影响到最终图像的质量和渲染效率。 但在实际使用过程中&#xff0c;由于3dsMax中有太多选项&#xff0c;很多…

一文看懂!电磁仿真软件CST Studio Suite的技术发展历程

CST工作套件室是一款功能强大、专业级别的软件包&#xff0c;用于进行微波无源器件和天线的仿真分析和设计。它支持的应用领域包括耦合器、滤波器、环流器、隔离器、谐振腔、平面结构、连接器、电磁兼容、集成电路封装以及各种类型的天线和天线阵列。该软件可以提供必要的S参数…

【C++】:vector容器的底层模拟实现迭代器失效隐藏的浅拷贝

目录 &#x1f4a1;前言一&#xff0c;构造函数1 . 强制编译器生成默认构造2 . 拷贝构造3. 用迭代器区间初始化4. 用n个val值构造5. initializer_list 的构造 二&#xff0c;析构函数三&#xff0c;关于迭代器四&#xff0c;有关数据个数与容量五&#xff0c;交换函数swap六&am…

【机器学习-k近邻算法-01】 | Scikit-Learn工具包进阶指南:机器学习sklearn.neighbors模块之k近邻算法实战

&#x1f3a9; 欢迎来到技术探索的奇幻世界&#x1f468;‍&#x1f4bb; &#x1f4dc; 个人主页&#xff1a;一伦明悦-CSDN博客 ✍&#x1f3fb; 作者简介&#xff1a; C软件开发、Python机器学习爱好者 &#x1f5e3;️ 互动与支持&#xff1a;&#x1f4ac;评论 &…

ubuntu下载离线软件包及依赖

目录 一、前言 二、正文 1.准备环境 2.开始下载 3.后续工作 三、总结 一、前言 由于给客户提供的设备机不允许上网&#xff0c;那么所有待安装的软件包及依赖库都需要提前下载好&#xff0c;然后通过局域网传过去再安装。 另外&#xff0c;软件包可能还依赖其他的库&…