最近我在准备原始 Sql Query 时卡住了一会儿,In clause
数据In clause
是python list
. 好的,让我把我的例子放在这里。
我想要的 Sql 查询
sql_query = 'SELECT * FROM student WHERE first_name IN ("Dean");'
根据我掌握的数据
data = ["Dean"]
query = 'SELECT * FROM student WHERE first_name IN %s;' % str(tuple(data))
# result was "SELECT * FROM student WHERE first_name IN ('Dean',) "
# see the *Comma* just before close parentheses which is a Sql error
但是在做了一些练习之后,我想出了一个类似这样的解决方案
str_data = ','.join(repr(x) for x in data)
query = 'SELECT * FROM student WHERE first_name IN (%s);' % str_data
# Gives proper result i.e "SELECT * FROM student WHERE first_name IN ('Dean');"
现在我的问题是,这是一个优雅的解决方案,还是我们在 python 中有其他几种优化方法。对此有您的看法将不胜感激:)。
编辑 到达另一个解决方案
data = tuple(data) if len(data) > 1 else "('%s')" % data[0] # Assumption: data should not be empty (in my case it is true)
query = 'SELECT * FROM student WHERE first_name IN {};'.format(data)
注意:如果可以进一步优化,仍然在寻找你们的一些意见。