Python也能写SQL,简单的数据库查询~
共 3598字,需浏览 8分钟
·
2021-10-01 18:36
通常我们在Excel中写函数公式,在SQL软件中写SQL,在Python软件中写Python,但是,某一天突发奇想,我要是在Python中写SQL能否实现呢?要知道Python可是万能的,Python除了不能生孩子,其他事都能做。
通过网络查询,我发现了这样一个库,它居然能在Python中写SQL,而且SQL语法在Python中完全支持,这就是下文我们详细介绍的pandasql库,在Python中写SQL能够做到手写自如,下面一起来学习~
本文使用工具:Python 3.7.0
本文使用的函数:pandas、pandasql
适用范围:pandasql库的使用、sql简单查询
数据获取
import pandas as pd
df=pd.read_excel(r'C:\Users\尚天强\Desktop\数据合并.xlsx')
#重命名
df.rename(columns={'累计票房(万)':'累计票房'}, inplace = True)
df.head()
要使用pandasql库的功能,需要提前下载pandasql库,这个库有没有跟pandas库很像,只是末尾缀加了sql,通常下载库,我们需要到终端输入pip install pandasql进行下载,这里只需要在代码行里加一个感叹号"!",就可以直接下载成功。
pandasql库安装
!pip install pandasql
下载库后,导入pandasql库进行使用。
#导入pandasql库
import pandasql as sql
pandasql库使用
查询df表所有的数据,其中"*"号代表导入全部的数据。
#1.查询df表所有的数据
sql.sqldf("""select * from df;""")
查询上映时间为2016年的所有电影信息(单一数据),添加一个where子句,where后面添加筛选条件。
#2.查询上映时间为2016年的所有电影信息(单一数据)
sql.sqldf("""select * from df
where 上映时间=2016;""")
查询所有电影的名称、电影主演和累计票房(单一字段选取),这里添加单独的字段即可进行筛选。
#3.查询所有电影的名称、电影主演和累计票房(单一字段选取)
sql.sqldf("""select 电影名称,电影主演,累计票房 from df;""")
查询2016年上映的电影且累计票房大于9000的电影信息(组合),这里并列两个条件且需要同时满足,使用and函数。
#4.查询2016年上映的电影且累计票房大于9000的电影信息(组合)
sql.sqldf("""select * from df
where 上映时间=2016
and 累计票房>90000;""")
查询上映时间为2016,2017,2018的电影信息(组合),如果查询条件不需要同时满足,只要满足其一即可,使用or函数。
#5.查询上映时间为2016,2017,2018的电影信息(组合)
sql.sqldf("""select * from df
where 上映时间=2016
or 上映时间=2017
or 上映时间=2018;""")
查询累计票房在150000到200000之间的电影信息(范围查询),条件值在某个区间内,使用 between and函数进行条件限制。
#6.查询累计票房在150000到200000之间的电影信息(范围查间)
sql.sqldf("""select * from df
where 累计票房 between 150000 and 200000;""")
查询电影导演为张艺谋,徐克,陈凯歌的电影信息(集合查询),限制条件在某几个值中,可以使用in进行筛选。
#7.查询电影导演为张艺谋,徐克,陈凯歌的电影信息(集合查询)
sql.sqldf("""select * from df
where 电影导演 in ('张艺谋','徐克','陈凯歌');""")
查询电影名称、电影导演和累计票房并起别名(别名),起别名我们用到as函数,后面跟具体的别名即可。
#8.查询电影名称、电影导演和累计票房并起别名(别名)
sql.sqldf("""select 电影名称 as 电影名,电影导演 as 导演,累计票房 as '累计票房/万元'
from df as table1;""")
查询电影中所有的电影类型(去重),数据去重使用distinct函数。
#9.查询电影中所有的电影类型(去重)
sql.sqldf("""select distinct 电影类型 from df;""")
查询电影表中累计票房为空的信息(null判断),在where子句中判断是否为null,这里使用is判断,而不是等于号。
#10.查询电影表中累计票房为空的信息(null判断)
sql.sqldf("""select * from df
where 累计票房 is null;""")
查询电影主演以刘开头的所有信息(模糊查询),使用like模糊查询,其中%表示任意0个或多个字符,可匹配任意类型和长度的字符。
#11.查询电影主演以刘开头的所有信息(模糊查询)
sql.sqldf("""select * from df
where 电影主演 like '刘%';""")
查询电影主演以德华结尾的所有信息(模糊查询)。
#12.查询电影主演以德华结尾的所有信息(模糊查询)
sql.sqldf("""select * from df
where 电影主演 like '%德华';""")
查询电影主演包含德字的所有信息(模糊查询)。
#13.查询电影主演包含德字的所有信息(模糊查询)
sql.sqldf("""select * from df
where 电影主演 like '%德%';""")
查询电影主演名字中第二个字是天字,使用like模糊查询,其中_ 表示任意单个字符,匹配单个任意字符,它常用来限制表达式的字符长度语句。
#14.查询电影主演名字中第二个字是天字
sql.sqldf("""select * from df
where 电影主演 like '_天%';""")
查询电影导演为徐克且按照累计票房降序排列,order by默认升序排列,desc降序排列。
#15.查询电影导演为徐克且按照累计票房降序排列
sql.sqldf("""select * from df
where 电影导演 = '徐克'
order by 累计票房 desc;""")
限制结果查询,其中limit3,5表示从第三行开始查询5行记录。
#16.限制结果查询
sql.sqldf("""select * from df
limit 3,5;""")