2017-04-12 29 views
3

我正在準備如下的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

你的字符串有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) 
相關問題