当前位置: 首页 > 面试题库 >

在Python中的SELECT语句中传递列名

万俟财
2023-03-14
问题内容
    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 ? = ?", filters[0], parameters[0], filters[1], parameters[1])
        all_rows = cursor.fetchall()

    elif count == 3 :
        cursor.execute("SELECT * FROM PacketManager WHERE ? = ? AND ? = ? AND ? = ?", filters[0], parameters[0], filters[1], parameters[1], filters[2], parameters[2])
        all_rows = cursor.fetchall()

这是我程序中的代码片段。我打算做的是在查询中传递列名和参数。

过滤器数组包含列名,参数数组包含参数。计数是用户设置的过滤器数。过滤器和参数数组已经准备就绪,没有问题。我只需要将其传递给查询即可执行。这给我一个错误“
TypeError:函数最多接受2个参数”


问题答案:

您只能使用设置参数?,不能使用表或列名称。

您可以使用预定义的查询来构建字典。

queries = {
    "foo": "SELECT * FROM PacketManager WHERE foo = ?",
    "bar": "SELECT * FROM PacketManager WHERE bar = ?",
    "foo_bar": "SELECT * FROM PacketManager WHERE foo = ? AND bar = ?",
}

# count == 1
cursor.execute(queries[filters[0], parameters[0])

# count == 2
cursor.execute(queries[filters[0] + "_" + queries[filters[1], parameters[0])

这种方法将使您避免从中进行SQL注入filters[0]



 类似资料:
  • 问题内容: 我想重命名表达式结果中的列。当然,以下操作无效: 由于我是SQL的新手,我想我只是缺少一个会导致答案的概念,工具或关键字。向正确方向的提示将不胜感激。谢谢! 更新 我正在寻找一种实现此目的的通用方法,并且特定于MySQL的技术绝对可以。 简而言之,我正在编写一个工具,用于将MySQL查询的结果“导出”到Google Spreadsheets(通过Google Data API)。有些查

  • 问题内容: 在WHERE子句中有使用SELECT语句描述的名称吗?这是好/不好的做法吗? 这会是更好的选择吗? 它远没有那么优雅,但是运行起来比以前的版本要快。我不喜欢它,因为它在GUI中没有非常清晰地显示(并且SQL初学者需要理解它)。我可以将其分为两个独立的查询,但是随后事情变得混乱了…… 注意:我不仅需要日期和分数(例如姓名) 问题答案: 称为相关子查询。它有它的用途。

  • 问题内容: 有我的问题,我有一个像这样的表: 当我创建表时,默认情况下排名为0,而我想要的是使用以下选择来更新表中的排名: 这个Select工作正常,但是我找不到使用它来更新table1的方法 我没有找到任何答案可以解决这种问题。如果有人可以给我任何有关是否可行的建议,我将不胜感激。 谢谢! 问题答案: 您可以加入 子查询 并执行 UPDATE : 在谓词中添加所需条件。 或者, 您可以使用 ME

  • 本文向大家介绍DBMS中的SELECT语句及其子句,包括了DBMS中的SELECT语句及其子句的使用技巧和注意事项,需要的朋友参考一下 select语句用于根据条件从数据库中获取所需的数据(如果有)。该数据以表格的形式返回。 select语句的基本语法是- select语句的一个示例是- <学生> 学生号码 学生姓名 学生电话 学生分数 学生_主修 科目 1 安德鲁 6615927284 95 文

  • 所以我有以下方法,效果很好: 但当我尝试时: 我得到: 我做错了什么?

  • 问题内容: 如何在MySQL的select语句中创建并自动增加临时列? 这是我到目前为止的内容: 哪个返回: 但是我需要: 问题答案: 这将为您提供一个 连续的 行号。 结果