説明
ループで条件を作成
-
enumerate()
を使って、data
の各要素をループしています。 -
start=1
でカウンタを1
から始めます。
各ループのステップで以下の処理を行っています
-
(id = :id{cnt} AND code = :code{cnt})
という文字列をcond
リストに追加。 -
param
辞書にパラメータとしてid
とcode
の値をキー付きで追加 (id{cnt}
やcode{cnt}
形式)。
例えば、最初のループでは次のように処理されます
cond.append('(id = :id1 AND code = :code1)')
param['id1'] = 10
param['code1'] = 'A10'
条件の結合
-
cond
リストに保存された各条件を" OR "
で結合し、最終的なSQL条件を作成します。
data = [
{ 'id': 10, 'code': 'A10' },
{ 'id': 20, 'code': 'A20' },
{ 'id': 30, 'code': 'A30' },
]
cond = []
param = {}
for cnt, item in enumerate(data, start=1):
cond.append(f'(id = :id{cnt} AND code = :code{cnt})')
param[f'id{cnt}'] = item['id']
param[f'code{cnt}'] = item['code']
print(" OR ".join(cond))
# (id = :id1 AND code = :code1) OR (id = :id2 AND code = :code2) OR (id = :id3 AND code = :code3)
print(param)
# {'id1': 10, 'code1': 'A10', 'id2': 20, 'code2': 'A20', 'id3': 30, 'code3': 'A30'}