最近我在准备原始Sql查询时遇到了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)
注意:如果可以进一步优化,还在寻找你们的一些观点。
答案 0 :(得分:0)
我在postgres数据库的python3中使用了这个,特别是如果您想要字符串 在IN运算符之后。请注意双引号与单引号:
data = ['test', 'test2', 'test3']
data_str = "', '".join(data)
query = "SELECT * FROM student WHERE first_name IN ('{}');".format(data_str))
或者如果您喜欢f字符串,则这样:
print(f"SELECT * FROM student WHERE first_name IN ('{data_str}');")