
if count == 1: cursor.execute("SELECT * FROM PacketManager WHERE ? = ?",filters[0],parameters[0]) all_rows = cursor.fetchall() elif count == 2: cursor.execute("SELECT * FROM PacketManager WHERE ? = ? AND ? = ?",parameters[0],filters[1],parameters[1]) all_rows = cursor.fetchall() elif count == 3 : cursor.execute("SELECT * FROM PacketManager WHERE ? = ? AND ? = ? AND ? = ?",parameters[1],filters[2],parameters[2]) all_rows = cursor.fetchall() 这是我程序中的代码段.我打算做的是在查询中传递列名和参数.
filters数组包含列名,参数数组包含参数.计数是用户设置的过滤器数量.过滤器和参数数组已准备就绪,没有问题.我只需要将它传递给查询即可执行.这给我一个错误“TypeError:函数最多需要2个参数”
解决方法 您只能使用?而不是表名或列名来设置参数.您可以使用预定义的查询构建一个dict.
querIEs = { "foo": "SELECT * FROM PacketManager WHERE foo = ?","bar": "SELECT * FROM PacketManager WHERE bar = ?","foo_bar": "SELECT * FROM PacketManager WHERE foo = ? AND bar = ?",}# count == 1cursor.execute(querIEs[filters[0],parameters[0])# count == 2cursor.execute(querIEs[filters[0] + "_" + querIEs[filters[1],parameters[0]) 这种方法将使您从过滤器[0]中的sql注入中保存.
总结以上是内存溢出为你收集整理的在Python中的SELECT语句中传递列名全部内容,希望文章能够帮你解决在Python中的SELECT语句中传递列名所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)