0
我的目标是在Python动态生成类似于SQL查询,的Python - 生成多行更新查询
UPDATE SURV_SCF_ID_STATUS
SET AGE_STATUS = CASE NAME
WHEN 'entityXp1' THEN '1'
WHEN 'entityXp3' THEN '0'
WHEN 'entityXpto1' THEN '1'
WHEN 'entityXpto3' THEN '1'
END
WHERE NAME IN ('entityXp1', 'entityXp3', 'entityXpto1', 'entityXpto3')
这是我到目前为止, 但仍感觉像一个丑陋的黑客攻击,
logs_age_list = [['entityXp1', '1'], ['entityXp3', '0'], ['entityXp1', '1'], ['entityXpto3', '1']]
conditions_list = []
where_list = []
for entity, status in logs_age_list:
conditions_list.append("\t\tWHEN %(entity)s THEN %(value)s" % locals())
where_list.append(entity)
conditions_string = '\n'.join(conditions_list)
where_string = ', '.join(where_list)
sql = '''
UPDATE SURV_SCF_ID_STATUS
SET AGE_STATUS = CASE NAME
%(conditions_string)s
END
WHERE NAME IN (%(where_string)s)
''' % locals()
print sql
有没有更明显的方法来做到这一点? 我没有找到任何允许这个的Python模块。
感谢
第二线的例子说:“显式优于隐式”。我会不惜任何代价避免%本地人()。 – atomocopter 2011-05-17 11:43:48
它不是也说, “美丽比丑陋/简单胜过复杂”? 在阅读wiki.python.org/moin/PythonSpeed/PerformanceTips和Zen状态“可读性计数”后,我开始将它用于可读性目的 – 2011-05-17 15:31:13