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


3 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. Lott在評論中提到,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 |”

我該如何解決這個問題?




@umounted答案的解決方案,因為它打破了一個元素的元組,因為(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)+'"'))



str.join以逗號分隔的列表值,並使用format操作符來形成查詢字符串。

myquery = "select name from studens where id in (%s)" % ",".join(map(str,mylist))

(謝謝​​, )




最簡單的方法是首先將列表轉換為tuple

t = tuple(l)
select name from studens where id IN" + str(t)



Related



Tags

python python   sql sql