• Python + SQL,终于找到一个好用的第三方库了!


    嗨害大家好鸭!我是小熊猫🖤

    请添加图片描述

    有什么python相关报错解答自己不会的、或者源码资料/模块安装/女装大佬精通技巧 都可以来这里:(https://jq.qq.com/?_wv=1027&k=2Q3YTfym)或者+V:python10010问我


    1. 演示数据 (https://jq.qq.com/?_wv=1027&k=2Q3YTfym)

    本文的所有演示数据,均是基于下方的四张表。

    下面这四张表大家应该不陌生,这就是网传50道经典MySQL面试题中使用到的几张原表。

    关于下方各表之间的关联关系,我就不给大家说明了,仔细观察字段名,应该就可以发现。

    请添加图片描述

    2. pandasql的使用 (https://jq.qq.com/?_wv=1027&k=2Q3YTfym)

    1)简介

    pandas中的DataFrame是一个二维表格,

    数据库中的表也是一个二维表格,

    因此在pandas中使用sql语句就显得水到渠成,

    pandasql使用SQLite作为其操作数据库,

    同时Python自带SQLite模块,不需要安装,便可直接使用。

    这里有一点需要注意的是:

    使用pandasql读取DataFrame中日期格式的列,

    默认会读取年月日、时分秒,

    因此我们要学会使用sqlite中的日期处理函数,

    方便我们转换日期格式,

    下方提供sqlite中常用函数大全,希望对你有帮助。

    sqlite函数大全:http://suo.im/5DWraE

    导入相关库:

    import pandas as pd
    from pandasql import sqldf
    
    • 1
    • 2

    2)声明全局变量的2种方式

    • ① 在使用之前,声明该全局变量;
    • ② 一次性声明好全局变量;

    ① 在使用之前,声明该全局变量

    #Python学习交流裙:660193417 ###
    df1 = pd.read_excel("student.xlsx")
    df2 = pd.read_excel("sc.xlsx")
    df3 = pd.read_excel("course.xlsx")
    df4 = pd.read_excel("teacher.xlsx")
    
    
    global df1
    global df2
    global df3
    global df4
    query1 = "select * from df1 limit 5"
    query2 = "select * from df2 limit 5"
    query3 = "select * from df3"
    query4 = "select * from df4"
    
    sqldf(query1)
    sqldf(query2)
    sqldf(query3)
    sqldf(query4)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    请添加图片描述
    ② 一次性声明好全局变量

    df1 = pd.read_excel("student.xlsx")
    df2 = pd.read_excel("sc.xlsx")
    df3 = pd.read_excel("course.xlsx")
    df4 = pd.read_excel("teacher.xlsx")
    
    pysqldf = lambda q: sqldf(q, globals())
    
    query1 = "select * from df1 limit 5"
    query2 = "select * from df2 limit 5"
    query3 = "select * from df3"
    query4 = "select * from df4"
    
    sqldf(query1)
    sqldf(query2)
    sqldf(query3)
    sqldf(query4)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    部分结果如下:

    请添加图片描述
    请添加图片描述

    3)写几个简单的SQL语句

    ① 查看sqlite的版本

    student = pd.read_excel("student.xlsx")
    pysqldf = lambda q: sqldf(q, globals())
    query1 = """
        select sqlite_version(*)
    """
    pysqldf(query1)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    结果如下:
    请添加图片描述
    ② where筛选

    student = pd.read_excel("student.xlsx")
    pysqldf = lambda q: sqldf(q, globals())
    query1 = """
        select * 
        from student 
        where strftime('%Y-%m-%d',sage) = '1990-01-01'
    """
    pysqldf(query1)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    结果如下:
    请添加图片描述
    ③ 多表连接

    student = pd.read_excel("student.xlsx")
    sc = pd.read_excel("sc.xlsx")
    
    
    pysqldf = lambda q: sqldf(q, globals())
    query2 = """
        select *
        from student s
        join sc on s.sid = sc.sid
    """
    pysqldf(query2)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    部分结果如下:

    请添加图片描述
    ④ 分组聚合

    student = pd.read_excel("student.xlsx")
    sc = pd.read_excel("sc.xlsx")
    
    
    pysqldf = lambda q: sqldf(q, globals())
    query2 = """
        select s.sname as 姓名,sum(sc.score) as 总分
        from student s
        join sc on s.sid = sc.sid
        group by s.sname
    """
    pysqldf(query2)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    结果如下:

    请添加图片描述
    ⑤ union查询

    student = pd.read_excel("student.xlsx")
    pysqldf = lambda q: sqldf(q, globals())
    query1 = """
        select * 
        from student 
        where strftime('%Y-%m',sage) = '1990-01'
        union
        select * 
        from student 
        where strftime('%Y-%m',sage) = '1990-12'
    """
    pysqldf(query1)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    结果如下:
    请添加图片描述

    希望这篇文章能对正在学习的你有所帮助~

    我是小熊猫,咱下篇文章再见(✿◡‿◡)

    在这里插入图片描述

  • 相关阅读:
    【Java 数据结构】栈与OJ题
    You辉编程_kafka
    光储并网直流微电网simulink仿真模型,光伏采用mppt实现最大功率输出研究
    FPGA的音乐彩灯VHDL流水灯LED花样,源码和视频
    简述JDK,JRE,JVM的关系
    基于python的对比度增强(线性变换、直方图正规化、直方图均衡化、CLAHE)
    亚马逊加湿器UL998测试报告,测试项目
    为什么 JavaScript 模块中的默认导出很糟糕
    windows查看端口占用和结束端口进程
    vue3+vite+ts项目初建(仅个人习惯)
  • 原文地址:https://blog.csdn.net/m0_67575344/article/details/126287514