• 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

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

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

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

    在这里插入图片描述

  • 相关阅读:
    阿里云全链路数据治理
    应用服务器部署:安装Docker及摘取镜像
    【C++高阶】3.2 vector容器
    如何在 Bash 脚本中添加注释
    事务的七种传播行为
    git stash 问题记录
    Transformer3
    How to add a jar to a project in eclipse?
    【运维日常】运维必备的 免费 在线画图工具,真的很好用!
    万物皆可集成系列:低代码释放用友深度价值(1)—系统对接集成
  • 原文地址:https://blog.csdn.net/m0_67575344/article/details/126287514