如何传递“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”: “没有足够的论据格式字符串”
请帮助。
答
你的字符串有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.html,https://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)
它不应该是'”, '加盟(' %s'的%对我我filter_site_value)'。 ? – kuro
甚至无法使用它形成基本查询 – Sushil