python封装函数循环_【Python数据处理】封装python查询SQL函数,灵活复用。

背景:

当我们明确我们分析的需求(目的、目标)后,我们第一步是获取数据,用SQL查询获取一些原始数据,并加载到Python环境中是常见的一种操作。

有的时候,我们会发现两段(甚至多段)SQL大部分内容是一样的,只是其中的一小部分有区别。如果全部复制黏贴,会出现大量的重复代码,会使脚本变的很长,便于维护,最关键的是,如果中间有逻辑要修改,就要每一段都逐一修改,非常麻烦,也很容易出错。

主要场景:用python连数据库查询并加载到本地内存进行后续处理。

数据量偏大,无法一次性导出(过程可能无响应或超时)。

此时可以按某一维度(例如时间、城市、区等等)将数据切割开,之后分段执行。

举个简单的例子:

sql_1="""select * from table1 where location='上海'"""

sql_2="""select * from table1 where location='北京'"""

sql_3="""select * from table1 where location='广州'"""

sql_4="""select * from table1 where location='深圳'"""

sql_5="""select * from table1 where location='武汉'"""

如果库或者表发生变化,或者where 条件需要增加或修改条件时,就会非常麻烦,尤其如果你的SQL并上面复杂时(一定比上面的复杂多了吧。。。)

解决方案:

将类似的SQL封装成函数,不同的地方改为参数。

代码:

from impala.dbapi import connect

import pandas as pd

#此处以impala链接为例:

ict_impala = connect('172.168.1.1', port=1234, user='zhz')

#获取目标班级

def my_sql_1(con,location):

sql="""select * from table1 where location='%s'"""%(location)

return pd.read_sql(sql,eng)

df=my_sql_1(ict_impala,"上海")

这样,如果SQL发生改变,我们只需要修改一段SQL即可。

封装成函数后,也可以循环使用:

#待遍历的维度

l_list=['上海','北京','广州','深圳','武汉']

#建个空的DF用来接收

df_all=pd.DataFrame()

#遍历维度列表,并拼接

for x in location:

df_all=pd.concat([df_all,my_sql_1(ict_impala,x))],axis=0)

函数使用指南:

输入:

con:指数据库连接实例

location:自定义参数,SQL中的变量

输出:

SQL查询结果的DataFrame

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值