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
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.