直接通過(guò) python的連接字符串生成查詢語(yǔ)句,有可能會(huì)有sql注入的危險(xiǎn)。如果,只生成單條查詢,注意點(diǎn)的話,連接字符串組合成查詢語(yǔ)句,危險(xiǎn)性大不大?好像應(yīng)該也沒(méi)什么問(wèn)題如果使用 “?”占位符的話,感覺(jué)很不靈活不方便。比如,多個(gè)keyselect * from tableselect id,name from table這里使用占位符,貌似不能這么用。 args= ('name','xxx')c.execute('select * from stocks where ?=?', args)(字符串連接成查詢語(yǔ)句,要帶入的查詢的值使用占位符??還是直接固定死了,盡量不要抽象話)
2 回答

慕田峪4524236
TA貢獻(xiàn)1875條經(jīng)驗(yàn) 獲得超5個(gè)贊
占位符只能在 VALUE 上使用 ... 表名和字段名都不能使用占位符 ...
換言之 ... 占位符必須不能影響 SQL 語(yǔ)句的構(gòu)造 ...

叮當(dāng)貓咪
TA貢獻(xiàn)1776條經(jīng)驗(yàn) 獲得超12個(gè)贊
占位符的確不能對(duì)字段名使用,只能對(duì)值使用,但是你完全可以構(gòu)建一個(gè)屬于自己的這樣子的函數(shù)。 python沒(méi)寫(xiě)過(guò),就用php來(lái)回答了,思路是一樣的,應(yīng)該能看懂吧。。。
<?php$arr = ['name1', 'value1', 'name2', 'value2'];echo implode_where($arr);function implode_where($conditions) { $where = []; $i = 0; do{ $column = $conditions[$i]; $value = $conditions[$i+1]; //此處可以視情況作一些過(guò)濾,比如把'轉(zhuǎn)義為\' $where[] = "`{$column}`='{$value}'"; //將$conditions中每?jī)蓚€(gè)元素為一組組合起來(lái) }while($i < count($conditions)); return join(',', $where); //然后用逗號(hào)把他們都拼起來(lái)}
嗯,要注意的一點(diǎn)是上面這個(gè)函數(shù)并不是十分嚴(yán)謹(jǐn),比如沒(méi)有判斷傳入?yún)?shù)為空,或者條件個(gè)數(shù)是奇數(shù)個(gè)的情況,主要只是提供一個(gè)思路啦~
添加回答
舉報(bào)
0/150
提交
取消