Python遇上SQL,于是一个好用的Python第三方库出现了

1. 演示数据

本文的所有演示数据,均是基于下方的四张表。下面这四张表大家应该不陌生,这就是网传50道经典MySQL面试题中使用到的几张原表。关于下方各表之间的关联关系,我就不给大家说明了,仔细观察字段名,应该就可以发现。

2. pandasql的使用

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

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

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

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

Python学习交流裙:279199867 ###
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)

部分结果如下:

Python遇上SQL,于是一个好用的Python第三方库出现了

② 一次性声明好全局变量

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)

部分结果如下:

Python遇上SQL,于是一个好用的Python第三方库出现了

3)写几个简单的SQL语句
① 查看sqlite的版本

student = pd.read_excel("student.xlsx")
pysqldf = lambda q: sqldf(q, globals())
query1 = """
    select sqlite_version(*)
"""
pysqldf(query1)

结果如下:

Python遇上SQL,于是一个好用的Python第三方库出现了

② 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)

结果如下:

Python遇上SQL,于是一个好用的Python第三方库出现了

③ 多表连接

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)

部分结果如下:

Python遇上SQL,于是一个好用的Python第三方库出现了

④ 分组聚合

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)

结果如下:

Python遇上SQL,于是一个好用的Python第三方库出现了

⑤ 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)

结果如下:

Python遇上SQL,于是一个好用的Python第三方库出现了

Original: https://www.cnblogs.com/hahaa/p/16394407.html
Author: 轻松学Python
Title: Python遇上SQL,于是一个好用的Python第三方库出现了

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/499303/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 爬虫日记(78):Scrapy的命令运行入口点

    前面经历了从安装程序转到scrapy程序运行,再从scrapy程序开始读取配置参数,再到命令行里处理参数,这样就把前期的工程准备好了,接着就来到了最后的阶段,运行爬虫了。这个阶段是…

    Python 2023年10月4日
    095
  • TypeScript 4.9 发布!

    TypeScript 是一种通过添加类型和类型检查构建在 JavaScript 之上的语言。类型可以描述诸如对象的形状、如何调用函数以及属性是否可以为 null 或 undefin…

    Python 2023年10月7日
    080
  • 在x64位的操作系统客户端如何连接oracle ?

    好久没更新博客了,上周在x64位的操作系统中安装好了32位或64位的oracle 11g客户端,但用SSIS或Microsoft SQL Server 2012报表生成器3.0去连…

    Python 2023年6月6日
    099
  • 1.scrapy框架介绍

    一、什么是scrapy框架? 先来看字面意思:框架。 一般来说,框架来源于建筑学,往往指建筑主体已经搭建好了,剩下的只是细枝末节的一些东西,比如安个门、砌一堵墙、开个窗户等等,不需…

    Python 2023年10月3日
    0113
  • TASK04分组|joyfulpandas

    目录 * – 一、分组模式及其对象 – + 1. 分组的一般模式 + 2. 分组依据的本质 + * 【练一练】 * 【END】 + 3.Groupby对象 …

    Python 2023年8月22日
    0107
  • 一文搞懂蓝牙模块各种工作模式

    本文主要归纳总结蓝牙模块的不同工作模式,通过蓝牙模块不同的工作模式了解其扮演不同角色时工作的一个基本原理,为更深入的研究蓝牙模块底层的工作机制和技术方案进行铺垫。 1、主设备工作模…

    Python 2023年10月13日
    076
  • Python前后端交互( Flask & Ajax )

    本文是自己学习Python前后端交互记录使用,之前没有学习过Python任何框架,前端也是简单学了一下,如哪里有问题,还望大家批评改正。 前端 1.1 HTML布局 这个就不用说啥…

    Python 2023年8月9日
    052
  • 使用js将html导出到word(包含样式及图片)

    工作中存在需要将页面内容导出到word,虽然可以使用后端代码实现,但是过程过于繁琐,本文章将详细讲解如何使用js将html内容快速导出到word。 示例 页面样式 导出结果 ; 步…

    Python 2023年11月8日
    0121
  • yolov5优化器及超参数设置

    文章目录 前言 一 优化器 二 超参数 参考 前言 一 优化器 机器学习的五个步骤: 数据 -> 模型 -> 损失 -> 优化器 -> 迭代训练。 我们通过…

    Python 2023年10月10日
    098
  • Python“快速复制粘贴”ins数据,一个简单的外国分享网站

    序言 Instagram(照片墙)是一款运行在移动端上的社交应用,以一种快速、美妙和有趣的方式将你随时抓拍下的图片彼此分享,Facebook公司旗下社交应用 本篇文章主要是如何&#…

    Python 2023年6月9日
    0111
  • 免费个人图床搭建gitee+PicGo

    我们写博客的时候经常会需要配图,特别是markdown写的时候只能通过网络链接来展示图片。 首先来说存储仓库。测试过几款存储图片的仓库,最终选择方案3: 1、阿里OSS需要付费,空…

    Python 2023年6月11日
    0119
  • 4-2 Matplotlib库 基本使用(绘制折线图)

    Matplobilb库数据分析常用图 0. 安装 1. 基本使用 2. 设置线条样式 2. 设置轴和标题 3. 设置marker 4. 设置注释文本 5. 设置图形样式 6. 保存…

    Python 2023年9月1日
    098
  • matpotlib之折线图

    文章目录 折线图: plot函数 示例说明: 扩展应用 * 1、 线条风格 – 线条颜色 线条样式 线条粗细 2、数据点标记marker 2、多组数据 总结: ; 折线…

    Python 2023年8月30日
    0110
  • scrapy框架初体验

    scrapy框架是一个常用的爬虫框架,其中内嵌了许多的内容,使得爬取网页的过程不再像原生那样复杂。 Scrapy的架构 引擎:负责控制数据流在所有组件流动,并在相应动作是触发事件。…

    Python 2023年10月6日
    061
  • 这个dataframe,有没有好的方法,可以转化成这样一个dataframe

    点击上方” Python爬虫与数据挖掘“,进行关注 回复” 书籍“即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 高…

    Python 2023年8月8日
    083
  • python3.7 数据转字典类型报错

    问题描述: 1: 我把 UTF-8 编码的数据传到 pipelines: 这个位置各种修改,报各种错误把json_content = json.dumps(dict(item), …

    Python 2023年10月5日
    070
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球