如何根据传递的参数动态更改函数的输出?

时间:2018-11-15 17:32:34

标签: python python-3.x function arguments

我正在尝试在python中构建一个函数,该函数根据用户传递的参数返回输出。

以下是基本功能:

def report():
    db_conn
    dwh_cursor = conn.cursor()  # set DB Cursor

    ## Query
    dwh_cursor.execute(sql.SQL("""select name,class,team,position from students"""))

上面的函数在执行时可以正常工作。我要在此处修改的是,当我传递一个带有值的参数时,仅该列应在函数的输出处返回。例如,在下面的函数中,我仅传递了两个参数,即name和class,并且我期望输出中仅这两个值,如下所示:

def report(name,class,team,position):
    db_conn
    dwh_cursor = conn.cursor()  # set DB Cursor

    ## Query
    dwh_cursor.execute(sql.SQL("""select name,class,team,position from students"""))

report("Scott","High_School","","")

Expected query to be executed:

    ## Query
    dwh_cursor.execute(sql.SQL("""select (%s),(%s) from students"""), (name,class))

有人可以指导我如何获得指定的输出吗?

1 个答案:

答案 0 :(得分:0)

您可能会发现更容易传递要检索的列名列表。

def report(*field_names):
    db_conn
    dwh_cursor = conn.cursor()  # set DB Cursor

    if not field_names:
        field_names = ('name', 'class', 'team', 'position')

    ## Query
    dwh_cursor.execute('select {} from students'.format(', '.join(field_names)))
    ...

report('name', 'class')

健康警告

  1. 根据用户输入动态生成sql是有风险的(即,如果未知/不受信任的用户可以设置要放入查询中的文本,那么他们就可以大幅度改变您正在运行的查询)

    < / li>
  2. 如果这是要支持的更大应用程序的一部分,则您可能会受益于ORM工具(例如sqlalchemy)来为您处理与数据库的接口