为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

波斯汪 2023-05-03 11:07:09
直接通过 python的连接字符串生成查询语句,有可能会有sql注入的危险。如果,只生成单条查询,注意点的话,连接字符串组合成查询语句,危险性大不大?好像应该也没什么问题如果使用 “?”占位符的话,感觉很不灵活不方便。比如,多个keyselect * from tableselect id,name from table这里使用占位符,貌似不能这么用。 args= ('name','xxx')c.execute('select * from stocks where ?=?', args)(字符串连接成查询语句,要带入的查询的值使用占位符??还是直接固定死了,尽量不要抽象话)
查看完整描述

2 回答

?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

占位符只能在 VALUE 上使用 ... 表名和字段名都不能使用占位符 ...

换言之 ... 占位符必须不能影响 SQL 语句的构造 ...


查看完整回答
反对 回复 2023-05-06
?
叮当猫咪

TA贡献1776条经验 获得超12个赞

占位符的确不能对字段名使用,只能对值使用,但是你完全可以构建一个属于自己的这样子的函数。 python没写过,就用php来回答了,思路是一样的,应该能看懂吧。。。

<?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]; //此处可以视情况作一些过滤,比如把'转义为\'
    $where[] = "`{$column}`='{$value}'"; //将$conditions中每两个元素为一组组合起来
  }while($i < count($conditions));  return join(',', $where); //然后用逗号把他们都拼起来}

嗯,要注意的一点是上面这个函数并不是十分严谨,比如没有判断传入参数为空,或者条件个数是奇数个的情况,主要只是提供一个思路啦~


查看完整回答
反对 回复 2023-05-06
  • 2 回答
  • 0 关注
  • 71 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信