Curso manejo de bases de datos con Python

Autor: Luis Fernando Apáez Álvarez

Clase 2:

Recordemos de la clase anterior que para poder ejecutar consultas SQL debíamos realizar la conexión con la base de datos, para lo cual utilizabamos el paquete psycopg2. También, recordemos que el código que empleabamos era algo largo, por ello, es conveniente crear una función para disminuir líneas de código, pero antes

Definiendo una función para las consultas

Ahora bien, bastará con copiar y pegar el código para la conexión y las consultas de la clase pasada dentro de una función que denominaremos execute_query la cual recibirá como parámetro la consulta que deseamos realizar:

Probamos nuestra función:

Cabe resaltar que al escribir cursor.fetcall estamos considerando que el resultado involucrará más de una fila. Si deseamos optimizar el código, cuando realicemos consultas que sabemos que sólo se nos regresará una fila, entonces ocuparemos cursor.fetchone.

Inserción de registros

Para insertar registros dentro de nuestra tabla curso_python ocuparemos prácticamente la misma función, pero, como ahora estamos modificando la BD debemos guardar los cambios hechos, para ello debemos agregar a nuestro código conexion.commit(). No obstante, lo anterior sólo debería hacerse si no estuvieramos trabajando con administradores de contexto. La ventaja de los administradores de contexto es que realizan dichos cambios de manera automática, por lo que en nuestro caso no es necesario agregar conexion.commit(). Además, para este caso

#.
          #.
          registros = cursor.fetchall()
          df = pd.DataFrame(registros)
          print(df)
          #.
          #.

esta parte del código de la función no es útil pues no estamos realizando consultas. Otro detalle que debemos considerar es que, al momento de realizar una inserción, escribiremos para algún campo una cadena de texto, por ejemplo

'INSERT INTO curso_python(nombre, apellido, edad, Ciudad) VALUES('Erick', 'García', 19, 'CDMX')'

sin embargo lo anterior causaría un error y en su lugar deberíamos de escribir

'INSERT INTO curso_python(nombre, apellido, edad, Ciudad) VALUES(\'Erick\', \'García\', 19, \'CDMX\')'

lo cual, si bien es correcto, no es tan conveniente. Podemos solucionar lo anterior si escribirmos

query = 'INSERT INTO curso_python(nombre, apellido, edad, Ciudad) VALUES(%s, %s, %s, %s)'
values = ('Erick', 'García', 19, 'CDMX')
cursor.execute(query, values)

con lo cual se sustituirán las entradas de la tupla values en los valores a ingresar del INSERT, donde, para ello nos valimos de %s y para realizar la ejecución adecuada se escribió cursor.execute(query, values). De modo que nuestra función quedaría como

Probamos nuestra función:

Veamos ahora de nuevo nuestra tabla

Podemos realizar varias inserciones en la misma tabla:

Veamos los cambios hechos