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では、(*)は受信したパラメータを1つのメタグループにし、(**)は受信したパラメータを辞書に格納します.
上の辞書のデータが多くなると交換できないことがありますか、できません.
 
  
>>> 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}