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第三方库出现了

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python遇上SQL,于是一个好用的Python第三方库出现了 - Python技术站

(0)
上一篇 2023年4月2日
下一篇 2023年4月2日

相关文章

  • 使用Python获取春节档电影影评,制作可视化词云图

    春节电影听巳月说都还可以,我不信,我觉得还是要看看看过的观众怎么说,于是我点开了流浪地球2 … 看起来好像不错的样子,8.2的评分,三十多亿的票房 就是这评价也太多了,那我们今天就把网友对它的评论获取下来,做成可视化词云图看看大家讨论最多的是什么。 准备工作 使用的环境 Python 3.8 解释器 Pycharm 编辑器   需要手动安装的模块 parse…

    Python开发 2023年3月31日
    00
  • 【Python基础教程】类的定义和使用

    哈喽兄弟们,今天咱们分享一下类的定义和使用。   在Python中,类表示具有相同属性和方法的对象的集合。在使用类时,需要先定义类,然后再创建类的实例,通过类的实例就可以访问类中的属性和方法了。 1、定义类 在Python中,类的定义使用class关键字来实现,语法如下: class ClassName: “”“类的帮助信息”“” # 类文本字符串 stat…

    Python开发 2023年4月2日
    00
  • 女同桌找我要表情包,还好我会Python,分分钟给她下载几十个G…

    emmm~ 起因呢,这昨晚女同桌跟我说电脑有点卡,喊我去宿舍给她装个新系统,装系统就装系统吧,结果又说新系统表情包都没保存~ 我当时就有点生气,真当我是万能的呢? 于是我直接就用Python给她爬了几十个G,完事扭头就走,任她怎么喊我也没用! 一、准备工作 使用的环境 python3.8 | Anaconda pycharm 使用的模块 requests 第…

    Python开发 2023年4月2日
    00
  • Python批量爬取美女写真集,只需27行代码,实现多页爬取!

    兄弟们,上一个系列大家多少有点不太喜欢,那今天上点不一样的。     来吧,直接整活~ 先准备一下 首先咱们需要安装一下这两个第三方模块 requests >>> # pip install requests parsel >>> # pip install parsel 不会安装的小伙伴,键盘按住win+r 在弹出来的运…

    2023年4月2日
    00
  • 重温Python基础——操作列表

    哈喽兄弟们,今天咱们来复习一下Python基础中的列表操作,不知道各位还记得多少呢? 遍历整个列表加粗样式 遍历列表的所有元素,对每一个元素进行相同的操作,是我们常常所需要的。在python中可使用for()循环。 假如我们需要将一个列表中的手机品牌一一打印,我们可以分别获取手机品牌的名字。如果数据特别的,对我们的操作要求量很大,而且容易输入错误,但使用fo…

    Python开发 2023年4月2日
    00
  • 重温Python基础——字符串

    哈喽,兄弟们, 本文带大家复习一下Python基础中的字符串,不知道大家还记得多少内容呢? 字符串 1、字符串就是一系列字符 在python中,用引号括起的都是字符串,其中引号可以是单的,也可以是双的。例如: “i am not happy” ‘i am not happy’   这种灵活性能在字符串中包含引号和撇号,例如: “she told me ‘Py…

    Python开发 2023年4月2日
    00
  • 用python将网上的文章转存为PDF文档,保存电脑上慢慢看

    我们有时候看到一篇好的文章,想去保存下来,传统方式一般是收藏书签、复制粘贴到文档或者直接复制链接保存,但这样一次两次还好,数量多了,比较麻烦不说,还可能不好找~ 这个时候,Python的作用就来了,直接抓下来导出为PDF,直接把整个网站的内容都导下来都行~ 话不多说,我们直接上代码! import requests import parsel import …

    Python开发 2023年4月2日
    00
  • Python生成字母对后写入文件

    一、人生苦短,我用Python 1、案例背景 生成字母对并写入文件,并将结果写入文件中。 文件中每行为: ab cd ef gh 2、主要知识点 文件读写 基础语法 zip 函数 字符串步长截取 3、素材 二、代码展示 创建一个py文件夹 咱们先导入需要用的模块 import platform import string # 我给大家准备了这些资料:Pyth…

    Python开发 2023年4月2日
    00
合作推广
合作推广
分享本页
返回顶部