向WHERE子句添加列表元素

2024-05-13 22:35:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我想给这个WHERE子句添加另一个条件:

stmt = 'SELECT account_id FROM asmithe.data_hash WHERE percent < {};'.format(threshold)

我有一个变量juris,它是一个列表。account_id和{}的值相关,因为当创建account_id时,它包含juris的子字符串。在

我想向查询添加一个条件,它需要匹配juris元素中的任何一个。通常我只添加...AND account_id LIKE '{}%'".format(juris),但这不起作用,因为{}是一个列表。在

如何将列表的所有元素添加到WHERE子句中?在


Tags: fromidformat元素列表dataaccounthash
3条回答

Stop using string formatting with SQL. Right now。明白吗?在

好了。SQL中有一个构造ANY,它允许您获取一个运算符并将其应用于数组。psycopg2支持将Python列表作为SQLARRAY[]传递。所以在这种情况下你可以

curs.execute('SELECT account_id FROM asmithe.data_hash WHERE percent LIKE ANY (%s)', (thelist,))

注意,%s是psycopg2查询参数占位符。它实际上不是一个格式说明符。第二个参数是元组,即查询参数。第一个(也是唯一的)参数是列表。在

还有一个ALL,它的工作原理与ANY相似,但只有当所有匹配项都为真时才为真,而不仅仅是当一个或多个匹配为真时。在

我希望juris是一个字符串列表?如果是这样,这可能会有帮助:

myquery = ("SELECT accountid FROM asmithe.data_hash "
           "WHERE percent in (%s)" % ",".join(map(str,juris)))

查看以下链接:

  1. python list in sql query as parameter

  2. How to select item matching Only IN List in sql server

  3. String formatting operations

Regex与运算符~一起使用:

 juris = ['2','7','8','3']

'select * from tbl where id ~ \'^({})\''.format('|'.join(juris))

这将导致以下查询:

^{pr2}$

这将使它们的id开头的任何2、7、8或3行。这是它的fiddle。在

如果希望id2783开头,请使用:

select * from tbl where id ~ '^2783'

如果id包含2、7、8或3中的任何一个

select * from t where id ~ '.*(2|7|8|3).*'

相关问题 更多 >