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.

Cómo utilizar una consulta de SQL con Python usando PYODBC

Tengo un script de Python que está conectado a una base de datos de servidor SQL utilizando streamlit para crear una interfaz de usuario.
Una de las consultas que utilizo incluye una subconsulta para seleccionar de 2 tablas de la siguiente manera:
el usuario selecciona un valor (nombre del país) de una lista desplegable y la consulta selecciona el nombre del país de la tabla A que es igual al id del nombre de la tabla B.

Supongo que el error está en la subconsulta.

Código:

nationality_stb = st.selectbox("Selecciona País", rows_NA1, key="n1")

sql = (
    r"select *, "
    r"(select NewColumn from nationality n where n.ID = m.nationality_1 and n.NewColumn = ? OR  ? = \' \') as first_nationality "
    r"from dbo.info m "
    r"where "
    r"(m.name LIKE CONCAT(\'%\', ?, \'%\') OR ? IS NULL) AND "
    r"(m.nickname LIKE CONCAT(\'%\', ?, \'%\') OR ? IS NULL)"
)

param1 = name_search
param2 = nickname_search
param3 = nationality_stb                       

rows = cursor.execute(sql, [
    param1, param1,
    param2, param2,
    param3, param3
]).fetchall()

Editar la consulta con Join:

sql = ('''
        select m.[ID],m.name 
        FROM dbo.info m 
        inner join nationality n on n.ID = m.nationality_1 
        where n.NewColumn = ? OR  ? = \' \'
        ;
        ''')

param3 = nationality_stb
rows = cursor.execute(sql, [
    param3, param3
]).fetchall()

testdf = pd.DataFrame.from_records(rows, columns=[column[0] for column in cursor.description])
st.write(testdf)

Intenté esta consulta en el estudio de administración de SQL con ID = 9 y NewColumn = “algeria”
– El resultado devuelto es 0
– El resultado esperado devuelto es 2

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que podría haber un problema con la subconsulta en el código original. Una solución alternativa propuesta sugiere usar un join en su lugar.

    La consulta actualizada combina la tabla “info” con la tabla “nationality” en las columnas “ID” y “nationality_1”, respectivamente, e incluye un filtro para seleccionar registros donde el valor de “NewColumn” coincide con el valor seleccionado de “nationality_stb” de la interfaz de usuario.

    Sin embargo, todavía podría haber un error con la salida esperada. Es difícil decirlo sin más contexto sobre las tablas y los datos involucrados.

Comments are closed.