国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

在Python MySQL的IN子句中嵌套一個(gè)列表
P粉781235689
P粉781235689 2023-08-22 17:04:59
0
2
616
<p>我知道如何將列表映射為字符串:</p> <pre class="brush:php;toolbar:false;">foostring = ",".join( map(str, list_of_ids) )</pre> <p>我知道我可以使用以下方法將該字符串放入IN子句中:</p> <pre class="brush:php;toolbar:false;">cursor.execute("DELETE FROM foo.bar WHERE baz IN ('%s')" % (foostring))</pre> <p>我需要以安全的方式(避免SQL注入)在MySQL數(shù)據(jù)庫(kù)中實(shí)現(xiàn)相同的功能。在上面的示例中,因?yàn)閒oostring未作為參數(shù)傳遞給execute,它是有漏洞的。我還必須在MySQL庫(kù)之外進(jìn)行引用和轉(zhuǎn)義。</p> <p>(有一個(gè)相關(guān)的SO問(wèn)題,但那里列出的答案要么不適用于MySQL數(shù)據(jù)庫(kù),要么容易受到SQL注入攻擊。)</p>
P粉781235689
P粉781235689

全部回復(fù)(2)
P粉434996845

雖然這個(gè)問(wèn)題很舊,但我想留下回復(fù),以防其他人也在尋找我想要的東西

當(dāng)我們有很多參數(shù)或者想要使用命名參數(shù)時(shí),接受的答案會(huì)變得混亂

經(jīng)過(guò)一些嘗試

ids = [5, 3, ...]  # id列表
cursor.execute('''
SELECT 
...
WHERE
  id IN %(ids)s
  AND created_at > %(start_dt)s
''', {
  'ids': tuple(ids), 'start_dt': '2019-10-31 00:00:00'
})

python2.7pymysql==0.7.11下測(cè)試通過(guò)

P粉212114661

直接使用list_of_ids

format_strings = ','.join(['%s'] * len(list_of_ids))
cursor.execute("DELETE FROM foo.bar WHERE baz IN (%s)" % format_strings,
                tuple(list_of_ids))

這樣可以避免自己引用,也避免了各種SQL注入問(wèn)題。

請(qǐng)注意,數(shù)據(jù)(list_of_ids)直接傳遞給mysql的驅(qū)動(dòng)程序作為參數(shù)(而不是在查詢文本中),因此沒(méi)有注入問(wèn)題。您可以在字符串中保留任何字符,無(wú)需刪除或引用字符。

最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板