我想为此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
子句?
答案 0 :(得分:0)
将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).*'
答案 1 :(得分:0)
我希望法官是一个字符串列表?如果是这样,这可能会有所帮助:
myquery = ("SELECT accountid FROM asmithe.data_hash "
"WHERE percent in (%s)" % ",".join(map(str,juris)))
请参阅以下链接:
答案 2 :(得分:0)
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
,但只有当所有匹配都为真时才会为真,而不仅仅是一个或多个匹配为真。