通常我们在Excel中写函数公式,在SQL软件中写SQL,在Python软件中写Python,但是,某一天突发奇想,我要是在Python中写SQL能否实现呢?要知道Python可是万能的,Python除了不能生孩子,其他事都能做。

通过网络查询,我发现了这样一个库,它居然能在Python中写SQL,而且SQL语法在Python中完全支持,这就是下文我们详细介绍的pandasql库,在Python中写SQL能够做到手写自如,下面一起来学习~



本文使用工具:Python 3.7.0

本文使用的函数:pandas、pandasql

适用范围:pandasql库的使用、sql简单查询



Python也能写SQL,简单的数据库查询~_python


下载案例数据,使用pandas库导入数据,在后续的数据筛选时我们发现累计票房(万),这个字段由于在SQL中识别括号时,字段报错,所以数据导入后直接重命名字段名称。


import pandas asdf=pd.read_excel(r'C:\Users\尚天强\Desktop\数据合并.xlsx')#重命名df.rename(columns={'累计票房(万)':'累计票房'}, inplace = True)df.head()


Python也能写SQL,简单的数据库查询~_数据_02

要使用pandasql库的功能,需要提前下载pandasql库,这个库有没有跟pandas库很像,只是末尾缀加了sql,通常下载库,我们需要到终端输入pip install pandasql进行下载,这里只需要在代码行里加一个感叹号"!",就可以直接下载成功。

pandasql库安装



!pip install pandasql


Python也能写SQL,简单的数据库查询~_sql_03

下载库后,导入pandasql库进行使用。


#导入pandasql库import pandasql as


pandasql库使用


查询df表所有的数据,其中"*"号代表导入全部的数据。


#1.查询df表所有的数据sql.sqldf("""select * from df;""")


Python也能写SQL,简单的数据库查询~_sql_04

查询上映时间为2016年的所有电影信息(单一数据),添加一个where子句,where后面添加筛选条件。


#2.查询上映时间为2016年的所有电影信息(单一数据)sql.sqldf("""select * from df             where 上映时间=2016;""")


Python也能写SQL,简单的数据库查询~_sql_05

查询所有电影的名称、电影主演和累计票房(单一字段选取),这里添加单独的字段即可进行筛选。


#3.查询所有电影的名称、电影主演和累计票房(单一字段选取)sql.sqldf("""select 电影名称,电影主演,累计票房 from df;""")


Python也能写SQL,简单的数据库查询~_python_06

查询2016年上映的电影且累计票房大于9000的电影信息(组合),这里并列两个条件且需要同时满足,使用and函数。


#4.查询2016年上映的电影且累计票房大于9000的电影信息(组合)sql.sqldf("""select * from df             where 上映时间=2016             and 累计票房>90000;""")


Python也能写SQL,简单的数据库查询~_python_07

查询上映时间为2016,2017,2018的电影信息(组合),如果查询条件不需要同时满足,只要满足其一即可,使用or函数。


#5.查询上映时间为2016,2017,2018的电影信息(组合)sql.sqldf("""select * from df             where 上映时间=2016              or 上映时间=2017              or 上映时间=2018;""")


Python也能写SQL,简单的数据库查询~_sql_08

查询累计票房在150000到200000之间的电影信息(范围查询),条件值在某个区间内,使用 between  and函数进行条件限制。


#6.查询累计票房在150000到200000之间的电影信息(范围查间)sql.sqldf("""select * from df             where 累计票房 between 150000 and 200000;""")


Python也能写SQL,简单的数据库查询~_python_09

查询电影导演为张艺谋,徐克,陈凯歌的电影信息(集合查询),限制条件在某几个值中,可以使用in进行筛选。


#7.查询电影导演为张艺谋,徐克,陈凯歌的电影信息(集合查询)sql.sqldf("""select * from df             where 电影导演 in ('张艺谋','徐克','陈凯歌');""")


Python也能写SQL,简单的数据库查询~_sql_10

查询电影名称、电影导演和累计票房并起别名(别名),起别名我们用到as函数,后面跟具体的别名即可。



#8.查询电影名称、电影导演和累计票房并起别名(别名)sql.sqldf("""select 电影名称 as 电影名,电影导演 as 导演,累计票房 as '累计票房/万元'             from df as table1;""")


Python也能写SQL,简单的数据库查询~_python_11

查询电影中所有的电影类型(去重),数据去重使用distinct函数。



#9.查询电影中所有的电影类型(去重)sql.sqldf("""select distinct 电影类型 from df;""")


Python也能写SQL,简单的数据库查询~_python_12

查询电影表中累计票房为空的信息(null判断),在where子句中判断是否为null,这里使用is判断,而不是等于号。



#10.查询电影表中累计票房为空的信息(null判断)sql.sqldf("""select * from df             where 累计票房 is null;""")


Python也能写SQL,简单的数据库查询~_数据_13

查询电影主演以刘开头的所有信息(模糊查询),使用like模糊查询,其中%表示任意0个或多个字符,可匹配任意类型和长度的字符。




#11.查询电影主演以刘开头的所有信息(模糊查询)sql.sqldf("""select * from df             where 电影主演 like '刘%';""")


Python也能写SQL,简单的数据库查询~_sql_14

查询电影主演以德华结尾的所有信息(模糊查询)。




#12.查询电影主演以德华结尾的所有信息(模糊查询)sql.sqldf("""select * from df             where 电影主演 like '%德华';""")


Python也能写SQL,简单的数据库查询~_sql_15

查询电影主演包含德字的所有信息(模糊查询)。




#13.查询电影主演包含德字的所有信息(模糊查询)sql.sqldf("""select * from df             where 电影主演 like '%德%';""")


Python也能写SQL,简单的数据库查询~_数据_16

查询电影主演名字中第二个字是天字,使用like模糊查询,其中_ 表示任意单个字符,匹配单个任意字符,它常用来限制表达式的字符长度语句。




#14.查询电影主演名字中第二个字是天字sql.sqldf("""select * from df             where 电影主演 like '_天%';""")


Python也能写SQL,简单的数据库查询~_数据_17

查询电影导演为徐克且按照累计票房降序排列,order by默认升序排列,desc降序排列。


#15.查询电影导演为徐克且按照累计票房降序排列sql.sqldf("""select * from df             where 电影导演 = '徐克'             order by 累计票房 desc;""")


Python也能写SQL,简单的数据库查询~_sql_18

限制结果查询,其中limit3,5表示从第三行开始查询5行记录。




#16.限制结果查询sql.sqldf("""select * from df             limit 3,5;""")


Python也能写SQL,简单的数据库查询~_sql_19