如何传递“IN子句”的可变参数

问题描述:

我正在准备如下的session.execute语句。 我有几个条件和一个IN子句。我收到下面的错误。 我知道我犯了一个错误,但无法使其工作。
filter_site_value = ['filter 1', 'filter 2']如何传递“IN子句”的可变参数

session = get_session() 
query = 'SELECT * FROM table where cv = %s AND dt > %s and dt < %s AND st IN (%s)' % ','.join('%s' for i in filter_site_value) 
data = (filter_customer_value,filter_date_start_value, filter_date_end_value, filter_site_value) 
rows = session.execute(query, data) 

“ERRORTYPE”: “类型错误”, “的errorMessage”: “没有足够的论据格式字符串”

请帮助。

+0

它不应该是'”, '加盟(' %s'的%对我我filter_site_value)'。 ? – kuro

+0

甚至无法使用它形成基本查询 – Sushil

你的字符串有3个地方,它需要格式的值到它(%s),你只提供一个值:','.join('%s' for i in filter_site_value)

所以,如果您有:

x = string_to_format % values 

和string_to_format包含X量的%s(或%d %r ...),那么你需要在X值values

见: https://docs.python.org/2/library/string.htmlhttps://pyformat.info/

你可能想要做的是:

query = 'SELECT * FROM table where cv = %s AND dt > %s and dt < %s AND st IN ('+ ','.join(filter_site_value)+')' 
data = (filter_customer_value,filter_date_start_value, filter_date_end_value) 

query = 'SELECT * FROM table where cv = %s AND dt > %s and dt < %s AND st IN ('+ ','.join(%s for i in filter_site_value)+')' 
data = (filter_customer_value,filter_date_start_value, filter_date_end_value)+tuple(filter_site_value)