将列表元素添加到 WHERE 子句
Adding list elements to WHERE clause
我想在此 WHERE
子句中添加另一个条件:
stmt = 'SELECT account_id FROM asmithe.data_hash WHERE percent < {};'.format(threshold)
我有变量 juris
,它是一个列表。 account_id
和 juris
的值相关,因为当创建 account_id
时,它包含 juris
的子字符串。
我想在查询中添加条件,即它需要匹配任何 juris
元素。通常我只会添加 ...AND account_id LIKE '{}%'".format(juris)
但这不起作用,因为 juris
是一个列表。
如何将列表的所有元素添加到 WHERE
子句?
使用 Regex
和运算符 ~
:
juris = ['2','7','8','3']
'select * from tbl where id ~ \'^({})\''.format('|'.join(juris))
导致此查询:
select * from tbl where id ~ '^(2|7|8|3)'
这会带来他们的 id
以 2、7、8 或 3 中的任何一个开头的行。这是一个 fiddle。
如果您希望 id
以 2783
开头,请使用:
select * from tbl where id ~ '^2783'
并且如果 id
包含 2,7,8 或 3
中的任何一个
select * from t where id ~ '.*(2|7|8|3).*'
我希望 juris 是一个字符串列表?如果是这样,这可能会有所帮助:
myquery = ("SELECT accountid FROM asmithe.data_hash "
"WHERE percent in (%s)" % ",".join(map(str,juris)))
查看这些链接:
python list in sql query as parameter
How to select item matching Only IN List in sql server
Stop using string formatting with SQL. Right now。明白了吗?
现在好了。在 SQL 中有一个构造,ANY
,它允许您采用运算符并将其应用于数组。 psycopg2
支持将 Python 列表作为 SQL ARRAY[]
传递。所以在这种情况下你可以
curs.execute('SELECT account_id FROM asmithe.data_hash WHERE percent LIKE ANY (%s)', (thelist,))
注意这里 %s
是 psycopg2 查询参数占位符。它实际上不是格式说明符。第二个参数是一个元组,查询参数。第一个(也是唯一的)参数是列表。
还有 ALL
,它的工作方式类似于 ANY
,但只有当所有匹配项都为真时才为真,而不仅仅是只有一个或多个匹配项为真。
我想在此 WHERE
子句中添加另一个条件:
stmt = 'SELECT account_id FROM asmithe.data_hash WHERE percent < {};'.format(threshold)
我有变量 juris
,它是一个列表。 account_id
和 juris
的值相关,因为当创建 account_id
时,它包含 juris
的子字符串。
我想在查询中添加条件,即它需要匹配任何 juris
元素。通常我只会添加 ...AND account_id LIKE '{}%'".format(juris)
但这不起作用,因为 juris
是一个列表。
如何将列表的所有元素添加到 WHERE
子句?
使用 Regex
和运算符 ~
:
juris = ['2','7','8','3']
'select * from tbl where id ~ \'^({})\''.format('|'.join(juris))
导致此查询:
select * from tbl where id ~ '^(2|7|8|3)'
这会带来他们的 id
以 2、7、8 或 3 中的任何一个开头的行。这是一个 fiddle。
如果您希望 id
以 2783
开头,请使用:
select * from tbl where id ~ '^2783'
并且如果 id
包含 2,7,8 或 3
select * from t where id ~ '.*(2|7|8|3).*'
我希望 juris 是一个字符串列表?如果是这样,这可能会有所帮助:
myquery = ("SELECT accountid FROM asmithe.data_hash "
"WHERE percent in (%s)" % ",".join(map(str,juris)))
查看这些链接:
python list in sql query as parameter
How to select item matching Only IN List in sql server
Stop using string formatting with SQL. Right now。明白了吗?
现在好了。在 SQL 中有一个构造,ANY
,它允许您采用运算符并将其应用于数组。 psycopg2
支持将 Python 列表作为 SQL ARRAY[]
传递。所以在这种情况下你可以
curs.execute('SELECT account_id FROM asmithe.data_hash WHERE percent LIKE ANY (%s)', (thelist,))
注意这里 %s
是 psycopg2 查询参数占位符。它实际上不是格式说明符。第二个参数是一个元组,查询参数。第一个(也是唯一的)参数是列表。
还有 ALL
,它的工作方式类似于 ANY
,但只有当所有匹配项都为真时才为真,而不仅仅是只有一个或多个匹配项为真。