guizans   02-05-2022, 15:33
#1
Hola

Estoy trasteando con Python y una base de datos en SQLite3. Tengo una función que recibe un parámetro de tipo String, hace la búsqueda en la base de datos y devuelve el resultado.

Código:
def devolver(a):
    sentencia = "SELECT * FROM articulos WHERE ID=?"
    cursor.execute(setencia,a)
    return cursor.fetchall()

Esto funciona perfectamente siempre y cuando el valor pasado exista en la base de datos, si no existe el programa se cae y me da un error en la línea execute. Pero si pongo esto:

Código:
def devolver(a):
    sentencia = "SELECT * FROM articulos WHERE ID=?"
    cursor.execute(setencia,[a])
    return cursor.fetchall()

 funciona perfectamente, es decir, si no existe en la base de datos devuelve una lista vacia. No logro encontrar información de por que este comportamiento. ¿Alguien sabe el por qué?
Un saludo.
jguardon   02-05-2022, 20:27
#2
Eso es porque el método execute espera una lista de argumentos en su segundo parámetro, es decir [a] debe ser del tipo lista y puede ser uno o más parámetros que son sustituidos en la consulta donde aparezcan los símbolos de interrogación en el orden de aparición.

Exactamente igual que la función Subst() de gambas para BD.

El hecho de que te haya funcionado al existir el registro es porque la función retorna None en caso de éxito y en caso de error lanza una excepción que no has controlado con except:.

Espero que eso aclare tu duda.

Saludos

Saludos

Por favor, usa el corrector ortográfico antes de pulsar el botón 'Enviar'
guizans   03-05-2022, 16:10
#3
Muchas gracias.

Sabía que execute requería una lista, lo que no sabía era ese extraño comportamiento, pero me lo has aclarado. Lo dicho, muchas gracias.

Un saludo.
  
Usuarios navegando en este tema: 6 invitado(s)
Powered By MyBB, © 2002-2024 MyBB Group.
Made with by Curves UI.