在sql查詢中的python列表作為參數python


Answers

你想要的SQL是

select name from studens where id in (1, 5, 8)

如果你想從python構建你可以使用

l = [1, 5, 8]
sql_query = 'select name from studens where id in (' + ','.join(map(str, l)) + ')'

map函數將把列表轉換成可以用逗號使用str.join方法粘在一起的字符串列表。

或者:

l = [1, 5, 8]
sql_query = 'select name from studens where id in (' + ','.join((str(n) for n in l)) + ')'

如果你喜歡生成器表達式的地圖功能。

更新: S.洛特在評論中提到,Python SQLite綁定不支持序列。 在這種情況下,你可能需要

select name from studens where id = 1 or id = 5 or id = 8

由...生成

sql_query = 'select name from studens where ' + ' or '.join(('id = ' + str(n) for n in l))
Question

我有一個python列表,說l

l = [1,5,8]

我想寫一個SQL查詢來獲取列表的所有元素的數據,說

“從studens中選擇名字id = |在列表中l |”

我如何解決這個問題?




不要讓它複雜化,解決這個問題很簡單。

l = [1,5,8]

l = tuple(l)

params = {'l': l}

cursor.execute('SELECT * FROM table where id in %(l)s',params)

我希望這有助於!




因為(1,)不是有效的SQL:

>>> random_ids = [1234,123,54,56,57,58,78,91]
>>> cursor.execute("create table test (id)")
>>> for item in random_ids:
    cursor.execute("insert into test values (%d)" % item)
>>> sublist = [56,57,58]
>>> cursor.execute("select id from test where id in %s" % str(tuple(sublist)).replace(',)',')'))
>>> a = cursor.fetchall()
>>> a
[(56,), (57,), (58,)]

其他解決方案的SQL字符串:

cursor.execute("select id from test where id in (%s)" % ('"'+'", "'.join(l)+'"'))