1

最近我在准备原始 Sql Query 时卡住了一会儿,In clause数据In clausepython 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)

注意:如果可以进一步优化,仍然在寻找你们的一些意见。

4

1 回答 1

0

我在 postgres 数据库的 python3 中使用了它,特别是如果你想要 IN 运算符之后的字符串。请注意双引号与单引号:

data = ['test', 'test2', 'test3']
data_str = "', '".join(data)
query = "SELECT * FROM student WHERE first_name IN ('{}');".format(data_str))

或者如果您更喜欢 f-strings,可以这样:

print(f"SELECT * FROM student WHERE first_name IN ('{data_str}');")
于 2020-12-15T09:12:04.383 回答