"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Mysqldb seleccione ... dónde ... en ... ¿por qué la consulta no tiene resultados?

Mysqldb seleccione ... dónde ... en ... ¿por qué la consulta no tiene resultados?

Publicado el 2025-04-16
Navegar:904

Why Doesn\'t My MySQLdb SELECT ... WHERE ... IN ... Query Return Results?

ejecutando "Seleccione ... donde ... en ..." Usando mySqldb

al ejecutar una consulta SQL con una cláusula en MySQLdb, es importante prestar atención a cómo están los parámetros de consulta construido.

problema

Un usuario encontró un problema al intentar seleccionar fooids donde la barra estaba en ('a', 'c') usando python y mysqldb. A pesar de que la consulta idéntica funcionó desde la línea de comandos mysql, no devolvió filas en python.

raíz causa

el problema surgió porque mysqldb convirtió el argumento parametrizado ['a', 'c'] a ("a '", "' c '"), que resultó en los valores parametrizados en los valores de los valores de parametrizado. cláusula.

solución

para ejecutar la consulta correctamente, los parámetros de consulta deben construirse manualmente. El siguiente código de Python demuestra cómo lograr esto:

python 3:

args = ['A', 'C']
sql = 'SELECT fooid FROM foo WHERE bar IN (%s)'
in_p = ', '.join(list(map(lambda x: '%s', args)))
sql = sql % in_p
cursor.execute(sql, args)

python 2:

args = ['A', 'C']
sql = 'SELECT fooid FROM foo WHERE bar IN (%s)'
in_p = ', '.join(map(lambda x: '%s', args))
sql = sql % in_p
cursor.execute(sql, args)
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3