python format 的给力用法及如何优雅地写动态sql 的反思

4 篇文章 0 订阅
2 篇文章 0 订阅

1. 文件形式存储SQL更优雅       

使用python 写后端代码的时候,需要简单地封装一下JDBC,但是把代码嵌套sql语句会很丑也麻烦。这个时候首先想到的是以文件的形式记录。比如,我的hive sql 就是写在sql_file中,然后使用如下方式读取使用

hive_sql = open(sql_file, "r").read()

2.python format 

下面给出一种 format 的使用方式 ,可以不用考虑参数位置

 
>>> hash = {'name':'xiaowang','age':18}
>>> ' my name is {name},age is {age} '.format(name= ' xiaowang ',age=19 )
>>> 'my name is {name},age is {age}'.format(**hash)

看这个简单例子,关键字参数值要对得上,可用字典当关键字参数传入值,字典前加**即可

Python中,(*)会把接收到的参数形成一个元组,而(**)则会把接收到的参数存入一个字典

如果上边的字典数据多了会出现无法替换的情况吗,不会。

 
>>> hash = {'name':'xiaowang','age':18,'sex':'M'}
>>> ' my name is {name},age is {age} '.format(name= ' xiaowang ',age=19 )
>>> 'my name is {name},age is {age}'.format(**hash)


3. 因为有时SQL不能确定使用多少参数变量,所以参数个数会经常变化,套用上边的是不是很轻松呢,不说太多了,直接上代码吧

code:

#!/usr/bin/env python
# -*- coding:utf8 -*-


import os


def query(sql_file):
    hive_sql = open(sql_file, "r").read()
    params = {
        'user_id': 'wang',
        'b2': 20,
        'b1': 10,
        'b0': 5
    }
    hive_sql = hive_sql.format(** params)
    print(hive_sql)
    os.system("hive -e '{}'".format(hive_sql))

sql_file

select * from ods.blacklist
where user_id
like '{user_id}'
and between {b1} and {b2}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值