SQLite Forum

Error al recuperar o leer en base de datos a traves de Nombre
Login

Error al recuperar o leer en base de datos a traves de Nombre

(1) By anonymous on 2020-08-07 12:31:10 [link] [source]

Hola, he creado una aplicacion con Tkinter en Python usando una base de datos Sqlite. al realizar la busqueda por Equipo, me sale este error:

sqlite3.OperationalError: no such column: Vara

Si el nombre del Equipo es un numero, me hace bien la operación de lectura de la base de datos, pero si tiene letras no. El código que he usado es el siguiente:

def leer():

miConexion=sqlite3.connect("Equipos")

miCursor=miConexion.cursor()

miCursor.execute("SELECT * FROM DATOSEQUIPOS WHERE EQUIPO=" + miEquipo.get())

elusuario=miCursor.fetchall()

for usuario in elusuario:
    miID.set(usuario[0])
    miEquipo.set(usuario[1])
    miN_Serie.set(usuario[2])
    miMAC.set(usuario[3])
    miIP.set(usuario[4])
    miWIFI.set(usuario[5])
    miVSM.set(usuario[6])
    miRoseta.set(usuario[7])
    textoComentario.insert(1.0, usuario[8])

miConexion.commit()

¿Me podeis ayudar?

Gracias de antemano.

(2.1) By Richard Hipp (drh) on 2020-08-07 12:55:14 edited from 2.0 in reply to 1 [source]

Moderator's note:

Answers should be in English. An English translation of the original follows:


Hello, I have created an application with Tkinter in Python using a Sqlite database. When searching for Equipo, I get this error:

   sqlite3.OperationalError: no such column: Vara

If the value of Equipo is a number, then reading of the database works, but if it has letters, it does not. The code I have used is the following:

  def leer():
    miConexion=sqlite3.connect("Equipos")
    miCursor=miConexion.cursor()
    miCursor.execute("SELECT * FROM DATOSEQUIPOS WHERE EQUIPO=" + miEquipo.get())
    elusuario=miCursor.fetchall()
    for usuario in elusuario:
      miID.set(usuario[0])
      miEquipo.set(usuario[1])
      miN_Serie.set(usuario[2])
      miMAC.set(usuario[3])
      miIP.set(usuario[4])
      miWIFI.set(usuario[5])
      miVSM.set(usuario[6])
      miRoseta.set(usuario[7])
      textoComentario.insert(1.0, usuario[8])
    miConexion.commit()

Can you help me? Thanks in advance!

(3) By Keith Medcalf (kmedcalf) on 2020-08-07 16:01:13 in reply to 1 [link] [source]

Use bound parameters. replace this:

miCursor.execute("SELECT * FROM DATOSEQUIPOS WHERE EQUIPO=" + miEquipo.get())

with this

miCursor.execute("SELECT * FROM DATOSEQUIPOS WHERE EQUIPO=?", (miEquipo.get(),))

This is because text fields must be properly quoted when you "construct" your SQL statement. Dynamic construction of SQL is fraught with peril.

https://xkcd.com/327/