Desde los name
s son únicos, realmente favorecen su método (del PO) de utilizar fetchone
o método de usar SELECT count(*)
sobre mi sugerencia inicial de usar fetchall
de Alex Martelli.
fetchall
ajusta los resultados (normalmente varias filas de datos) en una lista. Dado que name
s son únicos, fetchall
devuelve una lista con solo una tupla en la lista (por ejemplo, [(rowid,),]
o una lista vacía []
. Si desea conocer el rowid
, entonces usar fetchall
requiere que explore la lista y la tupla para obtener a la rowid
.
usando fetchone
es mejor en este caso ya que tienes una sola fila, (rowid,)
o None
. para llegar a la rowid
(siempre hay uno) sólo hay que escoger del primer elemento de la tupla
Si no le importa el particular rowid
y solo quiere saber que hay un acierto, , entonces podría usar la sugerencia de Alex Martelli, SELECT count(*)
, que devolvería (1,)
o (0,)
.
Aquí es un código de ejemplo:
Primera parte del código de la caldera de la placa de instalar una mesa sqlite juguete:
import sqlite3
connection = sqlite3.connect(':memory:')
cursor=connection.cursor()
cursor.execute('create table components (rowid int,name varchar(50))')
cursor.execute('insert into components values(?,?)', (1,'foo',))
Usando fetchall
:
for name in ('bar','foo'):
cursor.execute("SELECT rowid FROM components WHERE name = ?", (name,))
data=cursor.fetchall()
if len(data)==0:
print('There is no component named %s'%name)
else:
print('Component %s found with rowids %s'%(name,','.join(map(str, next(zip(*data))))))
rendimientos:
There is no component named bar
Component foo found with rowids 1
Uso de fetchone
:
for name in ('bar','foo'):
cursor.execute("SELECT rowid FROM components WHERE name = ?", (name,))
data=cursor.fetchone()
if data is None:
print('There is no component named %s'%name)
else:
print('Component %s found with rowid %s'%(name,data[0]))
rendimientos:
There is no component named bar
Component foo found with rowid 1
Uso de SELECT count(*)
:
for name in ('bar','foo'):
cursor.execute("SELECT count(*) FROM components WHERE name = ?", (name,))
data=cursor.fetchone()[0]
if data==0:
print('There is no component named %s'%name)
else:
print('Component %s found in %s row(s)'%(name,data))
rendimientos:
There is no component named bar
Component foo found in 1 row(s)
¿Quieres comprobar si es NULL o si existe la columna en el esquema del todo ?? – AndiDog
No, el nombre de la columna es ÚNICO, así que quiero seleccionar los componentes con ese nombre, si existe o no. Perdón por extrañar algunos detalles –
Si ha encontrado la solución, debe seleccionar una respuesta para marcar esta pregunta como respondida. Preferentemente, la respuesta de otra persona que te indicó el camino correcto. –