将参数(列表或数组)赋给in operator python,sq

2024-04-26 21:28:41 发布

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

我有一个python的列表。

article_ids = [1,2,3,4,5,6]

我需要在sql语句中使用此列表,如下所示:

SELECT id FROM table WHERE article_id IN (article_ids)

如何将此列表提供给我的IN()子句?

我已经尝试了一些我用谷歌搜索的方法,但我想不出来。

>> print ids_list
    placeholders= ', '.join('?'*len(ids_list))  # "?, ?, ?, ... ?"
    query = 'SELECT article_id FROM article_author_institution WHERE institution_id IN ({})'.format(placeholders)
    print query
    cursor.execute(query, ids_list)

收到错误消息:

SELECT article_id FROM article_author_institution WHERE institution_id IN (?)
     query = query % db.literal(args)
    TypeError: not all arguments converted during string formatting

例如:

ids_list = [9,10]

placeholders= ', '.join('%'*len(ids_list))  # "?, ?, ?, ... ?"
query = 'SELECT aid FROM article_author_institution WHERE instid IN ({})'.format(placeholders)
print query
cursor.execute(query, ids_list)

输出和错误消息为:

SELECT aid FROM article_author_institution WHERE instid IN (%, %)
Traceback (most recent call last):
  File "deneme3.py", line 11, in <module>
    cursor.execute(query, ids_list)
  File "/usr/lib/python2.7/dist-packages/MySQLdb/cursors.py", line 159, in execute
    query = query % db.literal(args)
ValueError: unsupported format character ',' (0x2c) at index 61

Tags: infromidids列表executearticleinstitution
1条回答
网友
1楼 · 发布于 2024-04-26 21:28:41

我们的想法是这样一个查询:

cursor.execute("SELECT ... IN (%s, %s, %s)", (1, 2, 3))

其中每个%s将由列表中的元素替换。要构造此字符串查询,可以执行以下操作:

placeholders= ', '.join(['%s']*len(article_ids))  # "%s, %s, %s, ... %s"
query = 'SELECT name FROM table WHERE article_id IN ({})'.format(placeholders)

最后

cursor.execute(query, tuple(article_ids))

相关问题 更多 >