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

2024-04-20 11:17:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在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))

有谁能指导我如何得到这个指定的输出吗?你知道吗


Tags: 函数namefromreportexecutesqlpositionconn
1条回答
网友
1楼 · 发布于 2024-04-20 11:17:31

您可能会发现传入要检索的列名列表更容易。你知道吗

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是有风险的(即,如果未知/不受信任的用户可以设置放入查询的文本,那么他们可能会极大地改变您正在运行的查询)

  2. 如果这是要支持的更大应用程序的一部分,则可以使用ORM工具(例如sqlalchemy)为您处理与数据库的接口

相关问题 更多 >