pythonformat的给⼒⽤法及如何优雅地写动态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}
linux安装redis服务

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。