请问生成查询语句比较好的实践应该是怎样的?

直接通过 python的连接字符串生成查询语句,有可能会有sql注入的危险。

如果,只生成单条查询,注意点的话,连接字符串组合成查询语句,危险性大不大?好像应该也没什么问题

如果使用 “?”占位符的话,感觉很不灵活不方便。

比如,多个key
select * from table
select id,name from table

这里使用占位符,貌似不能这么用。 

args= ('name','xxx')c.execute('select * from stocks where ?=?', args)

(字符串连接成查询语句,要带入的查询的值使用占位符??还是直接固定死了,尽量不要抽象话)

波斯汪
浏览 73回答 2
2回答

慕田峪4524236

占位符只能在 VALUE 上使用 ... 表名和字段名都不能使用占位符 ...换言之 ... 占位符必须不能影响 SQL 语句的构造 ...

叮当猫咪

占位符的确不能对字段名使用,只能对值使用,但是你完全可以构建一个属于自己的这样子的函数。 python没写过,就用php来回答了,思路是一样的,应该能看懂吧。。。<?php$arr&nbsp;=&nbsp;['name1',&nbsp;'value1',&nbsp;'name2',&nbsp;'value2'];echo&nbsp;implode_where($arr);function&nbsp;implode_where($conditions)&nbsp;{&nbsp;&nbsp;$where&nbsp;=&nbsp;[];&nbsp;&nbsp;$i&nbsp;=&nbsp;0;&nbsp;&nbsp;do{&nbsp;&nbsp;&nbsp;&nbsp;$column&nbsp;=&nbsp;$conditions[$i];&nbsp;&nbsp;&nbsp;&nbsp;$value&nbsp;=&nbsp;$conditions[$i+1];&nbsp;//此处可以视情况作一些过滤,比如把'转义为\' &nbsp;&nbsp;&nbsp;&nbsp;$where[]&nbsp;=&nbsp;"`{$column}`='{$value}'";&nbsp;//将$conditions中每两个元素为一组组合起来 &nbsp;&nbsp;}while($i&nbsp;<&nbsp;count($conditions));&nbsp;&nbsp;return&nbsp;join(',',&nbsp;$where);&nbsp;//然后用逗号把他们都拼起来}嗯,要注意的一点是上面这个函数并不是十分严谨,比如没有判断传入参数为空,或者条件个数是奇数个的情况,主要只是提供一个思路啦~
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python