En psycopg2, si tengo una tabla:
+------+-----+-------+ | name | age | color | +------+-----+-------+ | Bob | 25 | red | | Bill | 50 | blue | | Jane | 45 | black | +------+-----+-------+ Si cursor.execute("SELECT * FROM mySchema.this_table LIMIT 1") , verifico si el color existe con: colnames = [desc[0] for desc in cursor.description] luego busco colnames para 'color'
entonces creo que obtengo la fila con: myrow = importCursor.fetchone()
pero, ¿cómo obtengo el valor de 'color' de esa fila? color = importCursor.fetchone()['color'] pero eso no funciona.
¿Cómo obtengo el valor de color de la fila devuelta por esa instrucción SELECT? No sé cuántas columnas hay en la tabla, o si la columna 'color' siempre será la columna n. ° 3. Tengo que hacer esto para un montón de columnas en esta tabla (verifique si existe, si existe, devuelva la columna valor de la fila), ¡así que una forma eficiente es la mejor!
Si selecciona solo ciertas columnas, entonces conoce el orden de las columnas.
cursor.execute("SELECT name, age, color FROM mySchema.this_table LIMIT 1") Ahora sabes que la columna 0 es name , 1 es age , 2 es color . Entonces puedes elegir cuál con algo como myrow[1] .
Puede obtener un mapa de las columnas devueltas y luego usarlo para averiguar dónde buscar.
column_names = [desc[0] for desc in cursor.description] if 'color' in column_names: color = cursor.fetchOne()[column_names.index('color')] Esto debería ser relativamente eficiente, porque solo necesita calcular la lista de nombres de columna una vez después de la consulta, y luego puede asignar el nombre de columna a un número de columna con operaciones de lista simples como index y in , que son mucho más rápidas que presionar el botón base de datos de nuevo.