Este foro usa cookies
Este foro utiliza cookies para almacenar su información de inicio de sesión si está registrado y su última visita si no lo está. Las cookies son pequeños documentos de texto almacenados en su computadora; las cookies establecidas por este foro solo se pueden usar en este sitio web y no representan ningún riesgo de seguridad. Las cookies en este foro también rastrean los temas específicos que ha leído y la última vez que los leyó. Si Ud. continúa navegando, entenderemos que acepta todas las cookies.

Se almacenará una cookie en su navegador, independientemente de la elección, para evitar que se le vuelva a hacer esta pregunta. Podrá cambiar la configuración de sus cookies en cualquier momento utilizando el enlace en el pie de página.

El foro antiguo se encuentra accesible desde https://foro.gambas-es.org en modo de solo lectura.

Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5

Consulta a SQLite3
#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.

Python
  1. def devolver(a):
  2. sentencia = "SELECT * FROM articulos WHERE ID=?"
  3. cursor.execute(setencia,a)
  4. 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:

Python
  1. def devolver(a):
  2. sentencia = "SELECT * FROM articulos WHERE ID=?"
  3. cursor.execute(setencia,[a])
  4. 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.
    ¡Gracias!
#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'
    ¡Gracias!
#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.
    ¡Gracias!


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)