with tutorial the framework español applications python resultset python-db-api

python - tutorial - the django project



Python, ¿cómo verificar si un conjunto de resultados está vacío? (6)

Tengo una declaración SQL que no devuelve hits. Por ejemplo, ''select * from TAB where 1 = 2'' .

Quiero comprobar cuántas filas se devuelven,

cursor.execute(query_sql) rs = cursor.fetchall()

Aquí ya tengo la excepción: "(0, ''Sin conjunto de resultados'')"

¿Cómo puedo predecir esta excepción, verificar si el conjunto de resultados está vacío?


MySQLdb no generará una excepción si el conjunto de resultados está vacío. Además, la función cursor.execute () devolverá un valor largo que es el número de filas en el conjunto de resultados obtenido. Entonces, si desea verificar resultados vacíos, su código puede reescribirse como

rows_count = cursor.execute(query_sql) if rows_count > 0: rs = cursor.fetchall() else: // handle empty result set


Puedes hacer así:

count = 0 cnxn = pyodbc.connect("Driver={SQL Server Native Client 11.0};" "Server=serverName;" "Trusted_Connection=yes;") cursor = cnxn.cursor() cursor.execute(SQL query) for row in cursor: count = 1 if true condition: print("True") else: print("False") if count == 0: print("No Result")

Gracias :)


Si te estás conectando a una base de datos de Postgres, los siguientes trabajos:

result = cursor.execute(query) if result.returns_rows: # we got rows! return [{k:v for k,v in zip(result.keys(), r)} for r in result.rows] else: return None


Tuve problemas con el recuento de filas siempre regresando -1 sin importar la solución que probé.

Encontré lo siguiente como un buen reemplazo para verificar un resultado nulo.

c.execute("SELECT * FROM users WHERE id=?", (id_num,)) row = c.fetchone() if row == None: print("There are no results for this query")


cursor.rowcount se establecerá en 0.

Sin embargo, si está ejecutando una declaración que nunca devolvería un conjunto de resultados (como INSERT o SELECT ... INTO ), no necesita llamar a .fetchall() ; nunca habrá un conjunto de resultados para tales declaraciones. Llamar a .execute() es suficiente para ejecutar la sentencia.


Aviso: Esto es para el módulo MySQLdb en Python.

Para una declaración SELECT , no debería haber una excepción para un conjunto de registros vacío. Solo una lista vacía ( [] ) para cursor.fetchall() y None para cursor.fetchone() .

Para cualquier otra declaración, por ejemplo, INSERT o UPDATE , que no devuelve un conjunto de registros, no puede llamar a fetchall() ni a fetchone() en el cursor. De lo contrario, se producirá una excepción.

Hay una manera de distinguir entre los dos tipos de cursores anteriores:

def yield_data(cursor): while True: if cursor.description is None: # No recordset for INSERT, UPDATE, CREATE, etc pass else: # Recordset for SELECT, yield data yield cursor.fetchall() # Or yield column names with # yield [col[0] for col in cursor.description] # Go to the next recordset if not cursor.nextset(): # End of recordsets return