如何使用in_运算符正确构造查询

时间:2016-08-12 10:27:28

标签: python sqlalchemy

我有一个带有IN语句的SQL更新查询,它通过SQLAlchemy执行。不幸的是,当前的实现使用字符串插值,我想用更安全的选项替换它。

 app.controller('threeCtrl',function($scope){
        $("#subBusinessOne").click(function(e) {
        e.preventDefault();
        var url = "businessFormOne.php"; 
        $.ajax({
                   type: "POST",
                   url: url,
                   data: $("form#businessFormOne").serialize(), 
                   success: function(data)
                   {
                       var name = $("input[name=name]").val("");
                       var rel= $("input[name=phone]").val("");
                   }
                 });
        return false; // avoid to execute the actual submit of the form.
            });
        });

是否可以在此处使用session.execute(''' UPDATE servers SET cpu_cores=st.cpu_cores, cpu_mhz=st.cpu_mhz, ram_mb=st.ram_mb FROM servers WHERE server.provider_id IN (%s) ''' % ','.join([ ... ])) 方法替换%运算符?或者我应该使用in_

重新实现此查询

1 个答案:

答案 0 :(得分:1)

如果您只想让它更安全,您仍然可以在param占位符中进行插值:

session.execute("""UPDATE ... WHERE server.provider_id IN (%s)""" % ",".join("?" * len(provider_ids)), provider_ids)

?是占位符,根据您使用的数据库驱动程序的paramstyle而有所不同。

否则,最简单的方法是将其转换为session.queryupdate().where()结构。