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

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}

你可能感兴趣的:(hive,python3,sql,jdbc)