【问题标题】:How to pass variable parameter for "IN clause"如何为“IN 子句”传递可变参数
【发布时间】:2017-09-08 08:21:04
【问题描述】:

我正在准备如下的 session.execute 语句。 我的条件很少,只有一个 IN 子句。我收到以下错误。 我知道我做错了,但无法让它发挥作用。
filter_site_value = ['filter 1', 'filter 2']

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": "TypeError", "errorMessage": "格式字符串的参数不足"

请帮忙。

【问题讨论】:

  • 不应该是','.join('%s' %i for i in filter_site_value)吗?
  • 甚至无法使用它形成基本查询

标签: python python-2.7 cassandra datastax


【解决方案1】:

您的字符串有 3 个位置需要将值格式化到其中 (%s),您只需提供一个值:','.join('%s' for i in filter_site_value)

如果你有:

x = string_to_format % values

并且 string_to_format 包含 X 数量的 %s(或 %d %r ...),那么您需要 values 中的 X 值

见: 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)

【讨论】:

    猜你喜欢
    • 2012-10-18
    • 1970-01-01
    • 1970-01-01
    • 2011-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-12
    相关资源
    最近更新 更多