python formatの給力の使い方とどのように優雅に動的sqlの反省を書くか
1.ファイル形式でSQLを保存する方が優雅である
pythonを使用してバックエンドコードを書く場合は、簡単にJDBCをカプセル化する必要がありますが、コードをsql文にネストするのは醜くて面倒です.このとき最初に思いついたのは、ファイル形式で記録することです.例えば、私のhive sqlはsql_に書かれています.fileでは、次のように読み出して使用します.
2.python format
パラメータ位置を考慮せずにformatの使用方法を示します
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_fileselect * from ods.blacklist where user_id like '{user_id}' and between {b1} and {b2}