python - 数据库查询语句的生成,以及占位符使用的疑问

 狂浪的眼神 发布于 2022-11-05 22:16

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

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

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

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

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

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

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

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

2 个回答
  • 占位符的确不能对字段名使用,只能对值使用,但是你完全可以构建一个属于自己的这样子的函数。 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); //然后用逗号把他们都拼起来
    }
    

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

    2022-11-10 14:44 回答
  • 占位符只能在 VALUE 上使用 ... 表名和字段名都不能使用占位符 ...

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

    2022-11-10 14:44 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有