es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Pasando una variable opcional en una función de Python para extraer datos de una base de datos SQL.

Tengo problemas para entender esto. Quiero tener la opción de pasar una variable a una función o no pasarla. He intentado varias formas. Esta es mi forma más reciente, pero todavía no funciona.

Básicamente, estoy pasando o no pasando la variable 10538 a la función. Tengo un if else dentro de la función que quiero que funcione en función de si la variable está presente o no, es decir, si se ha pasado o no. Si se pasa, debería extraer los datos asociados con la variable 10538 de la base de datos SQL, o si no se pasa, extraerá TODOS los datos de todos los registros en la base de datos SQL.

¿Alguna idea? Gracias.

fundbhID = 10538

def AUMVaR(fundbhID):
    if not fundbhID:
        fundVaR = pd.read_sql_query(
        '''
        select *
        from vwExposure_VaR
        ''',conn)
        fundVaR = pd.DataFrame(fundVaR) 
    else:
        fundVaR = pd.read_sql_query(
        '''
        select *
        from vwExposure_VaR
        where BaseHoldingID="'''+ str(fundbhID) + '''"
        ORDER by ReportingDate asc
        ''',conn) 
        fundVaR = pd.DataFrame(fundVaR)

    return fundVaR

fundVaR()  

# o se podría pasar con la variable:

fundVar(10538)

¡Gracias por tu ayuda! Apreciado.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema con el código es que al llamar la función sin pasar una variable, el parámetro fundbhID todavía se define como un valor vacío, por lo que la condición if not fundbhID todavía será falsa y la función siempre ejecutará el bloque else.

    Una forma de solucionar esto podría ser definir un valor predeterminado para el parámetro fundbhID, como None. De esta manera, si se llama a la función sin pasar una variable, el parámetro tomará el valor de None y la condición if not fundbhID será verdadera, lo que permitirá que la función ejecute el primer bloque y extraiga todos los datos de la base de datos SQL.

    Aquí hay una función de ejemplo con el valor predeterminado:

    def AUMVaR(fundbhID=None):
        if not fundbhID:
            fundVaR = pd.read_sql_query("""
            select *
            from vwExposure_VaR""", conn)
        else:
            fundVaR = pd.read_sql_query("""
            select *
            from vwExposure_VaR
            where BaseHoldingID=""" + str(fundbhID) + """ORDER by ReportingDate asc""", conn) 
    
        fundVaR = pd.DataFrame(fundVaR)
    
        return fundVaR
    

    Para llamar a la función sin pasar una variable, simplemente use:

    fundVaR = AUMVaR()
    

    Para llamar a la función con la variable:

    fundVaR = AUMVaR(10538)
    

Comments are closed.