亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

SQL查詢中的Python列表作為參數

SQL查詢中的Python列表作為參數

慕森卡 2019-07-20 09:49:50
SQL查詢中的Python列表作為參數我有一張蟒蛇名單,比如說我l = [1,5,8]我想編寫一個SQL查詢來獲取列表中所有元素的數據,比如select name from students where id = |IN THE LIST l|我該如何做到這一點?
查看完整描述

3 回答

?
白衣染霜花

TA貢獻1796條經驗 獲得超10個贊

到目前為止,答案是將值模板為普通的SQL字符串。對于整數來說,這是絕對可以的,但是如果我們想對字符串這樣做,我們就會得到轉義問題。

下面是一個使用參數化查詢的變體,這兩個查詢都可以使用:

placeholder= '?' # For SQLite. See DBAPI paramstyle.placeholders= ', '.join(placeholder for unused in l)query= 'SELECT name FROM students WHERE id IN (%s)' % placeholders
cursor.execute(query, l)


查看完整回答
反對 回復 2019-07-20
?
紫衣仙女

TA貢獻1839條經驗 獲得超15個贊

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

l = [1,5,8]l = tuple(l)params = {'l': l}cursor.execute('SELECT * FROM table where id in %(l)s',params)

我希望這能幫上忙!


查看完整回答
反對 回復 2019-07-20
?
慕妹3242003

TA貢獻1824條經驗 獲得超6個贊

您想要的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)) + ')'

這個地圖函數將列表轉換為字符串列表,這些字符串可以通過逗號使用加入方法。

另一種選擇是:

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

如果你愿意生成器表達式映射函數。

最新情況:S.Lott注釋中提到PythonSQLite綁定不支持序列。在這種情況下,你可能想

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))


查看完整回答
反對 回復 2019-07-20
  • 3 回答
  • 0 關注
  • 1076 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號