python的if和else对应问题_如何在python中的单行中编写if和else

本文介绍了如何使用Python的itertools模块进行高效的数据操作,包括三元表达式、元组解包、字典构建以及避免`listindexoutofbounds`问题。通过实例展示如何优雅地处理数据和构建SQL查询,同时提到了防止SQL注入的最佳实践。
摘要由CSDN通过智能技术生成

您可以使用this SO answer中的三元表达式(v2.5)。但我建议:names = ['campaignID', 'keywordID' ... ]

data = itertools.izip_longest(names, ex_li)

key_string = ','.join(data.keys())

query = '...(' + key_string + ')...( %s, %s, %s, %s )' #no % here

cursor.execute(query, data.values())

说明:

为了回答您修改后的问题,即测试ex_li[0],然后分配其值,检查空白并在找到空白时分配它是没有意义的,您可以这样做:

^{pr2}$

那么如果ex_li[0]是{},这就是你在{}中得到的结果。您提到了list index out of bounds,但是在更新的代码中不会发生这种情况,除非您的列表长度错误。在

但在更高级别上,您可以完全删除这些if语句:(campaignID, keywordID, ...) = ex_li

这是元组解包。或者,构建一个字典,这似乎更有用,因为您需要将ID同时视为数据和选择器:names = ['campaignID', 'keywordID' ... ]

data = zip(names, ex_li)

# now have data = {'campaignID': ex_li[0], ... }

您可以适当地构造查询:query = 'insert into Performance report (' + ','.join(data.keys()) + ') ' +

'values (' + ','.join("'"+elem+"'" for elem in data.values()) + ')'

一种改进可能是,如果您得到None而不是一个空字符串(它将变成'None'作为字符串),然后修改为zip读取的值:data = zip(names, (elem or '' for elem in ex_li))

这应该是空字符串而不是“None”。在

如果thg435是正确的,您有时会得到一个更短的列表,那么您可以压缩一些额外的'':data = zip(names, itertools.chain((elem or '' for elem in ex_li),

itertools.repeat('')))

在这里,repeat将给出一个''的无休止的列表,chain将从exu li获取元素,直到它用完为止,然后从repeat开始获取{}。zip会一直运行到一个或其他迭代器用完,所以当{}用尽时,它将停止。或者,如果希望分别处理None值,可以izip_longest:data = itertools.izip_longest(names, ex_li)

key_string = ','.join(data.keys())

value_string = ','.join("'"+str+"'" for str in

(elem or '' for elem in data.values()))

query = '...(' + key_string + ')....(' + value_string + ')...'

或者为了便于阅读:def quotify(str):

return "'"+str+"'"

但是不要这样做。使用光标.执行在DB API中,而不是自己引用值,正如许多问题所证明的那样(例如Python: get escaped SQL string):query = '...(' + key_string + ')...( %s, %s, %s, %s )' #no % here

cursor.execute(query, data.values())

这允许dbapi为您正确地进行转义,防止注入攻击或事故。在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值