0% encontró este documento útil (0 votos)
30 vistas

Python - API DB

El documento explica qué es una API de base de datos en Python y cómo se puede usar la API de Python para interactuar con una base de datos. Una API permite que los programas se comuniquen y proporciona funciones como ejecutar consultas o inserciones. La API de Python permite conectarse a diferentes bases de datos usando los mismos métodos, como cursor(), execute(), fetchone(), y fetchall(). Se provee un ejemplo de cómo conectarse a Oracle y ejecutar consultas, inserciones y actualizaciones usando parámetros.

Cargado por

Negrosson
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como PPTX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
30 vistas

Python - API DB

El documento explica qué es una API de base de datos en Python y cómo se puede usar la API de Python para interactuar con una base de datos. Una API permite que los programas se comuniquen y proporciona funciones como ejecutar consultas o inserciones. La API de Python permite conectarse a diferentes bases de datos usando los mismos métodos, como cursor(), execute(), fetchone(), y fetchall(). Se provee un ejemplo de cómo conectarse a Oracle y ejecutar consultas, inserciones y actualizaciones usando parámetros.

Cargado por

Negrosson
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como PPTX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 18

PYTHON – API DB

Profesor: Leandro Lillo


QUÉ ES UNA API

• Una API (Application Programming Interface), es un módulo programado


que te permite comunicarte con otros programas.
• En este caso, cómo crees que un lenguaje de programación podría
comunicarse con la Base de datos?
• Las APIs tienen funciones implementadas que llaman al programa (en este
caso Oracle). Dichas funciones tendrán las funcionalidades necesarias para
interactuar con la base de datos, como ejecutar consultas o inserciones.
QUÉ ES UNA API
• Si pudiéramos compararlo,
sería como el “Driver” que
te permite utilizer un
dispositivo.
• Para conectar tu programa
con una base de datos,
necesitas este “Driver”, que
sería la API de Python.
POR QUÉ USAR LA API DB DE PYTHON

• La principal utilidad que presta la API de Python, es que, independiente de la


base de datos a la que te quieras conectar (MySQL, Oracle, SQL Server,
etc.), ocuparás siempre los mismos métodos para realizar tus acciones.
• A continuación, se detallarán los objetos y sus métodos más importantes.
MÉTODOS DE LA API DB - PYTHON
• cursor(): una vez creado tu objeto de conexión, podrás llamar a este método. El
objeto retornado te permitirá interactuar con la base de datos.
• execute(sql): ejecuta una sentencia SQL. La sentencia puede estar
parametrizada de distintas formas.
• fetchone(): retorna una fila de resultados de la sentencia ejecutada, o NONE
cuando no hay datos disponibles.
• fetchall(): retorna todas las filas de datos de una query, retornando los datos
como lista. Si no hay resultados disponibles, retornará una lista vacía.
• close(): cierra el cursor (importante para no gastar recursos).
EJEMPLO DE USO - ORACLE

• Para conectarnos con Oracle, primero necesitamos instalar el “driver” que


nos ayudará a comunicarnos con Oracle (cada empresa tiene su propio
conector).
• Ejecuta la siguiente línea de comando en tu terminal:
python -m pip install cx_Oracle

• NOTA: asegúrate de tener instalada la versión de 64 bits de Python para no


tener errores de compatibilidad.
CONEXÓN CON ORACLE DB

• Ahora podrás importar la librería de Oracle: usuario


usuario == "inacap"
password
"inacap"
password == "oracle"
"oracle"
dsn
dsn == "localhost/xe"
"localhost/xe"
import
import cx_Oracle
cx_Oracle

• Nos conectaremos usando el método connect:


connection
connection == cx_Oracle.connect(user=usuario,
cx_Oracle.connect(user=usuario, password=password,
password=password, dsn=dsn)
dsn=dsn)

• user: corresponde al usuario con el que te conectas a Oracle.


• password: que le hayas puesto al usuario con el que te quieres conectar a tu BD.
• dsn: es la ruta de conexión con Oracle (como una especie de URL). Primero va la IP del
servidor (como es nuestro PC, apuntamos a localhost), y después el nombre del SID.
EJECUTAR UNA CONSULTA

• Ahora connection es nuestro objeto que tiene una conexión activa y abierta
con la base de datos.
• Si usamos el método .cursor(), obtendremos un objeto para ejecutar acciones:
• Por ejemplo, para hacer una consulta, usando el objeto obtenido llamamos a .execute() y
entre paréntesis escribimos un String con la sentencia select.
cursor
cursor == connection.cursor()
connection.cursor()
cursor.execute("SELECT
cursor.execute("SELECT ** FROM
FROM clientes")
clientes")

• El resultado lo podremos “recoger” llamando al método fetchall()


OBTENER Y RECORRER RESULTADOS

• Si vamos a obtener una lista de datos, usaremos cursor.fetchall(); o si


queremos solo un resultado, usaremos cursor.fetchone().
cursor
cursor == connection.cursor()
connection.cursor()
cursor.execute("SELECT
cursor.execute("SELECT ** FROM
FROM clientes")
clientes")
filas
filas == cursor.fetchall()
cursor.fetchall()

for
for cliente
cliente in
in filas:
filas:
print(cliente)
print(cliente)

• fetchall() nos devuelve una lista de datos. Esa lista la podemos recorrer en un
ciclo for() para obtener sus resultados.
OBTENER Y RECORRER RESULTADOS

• Podemos obtener los valores específicos si apuntamos a la columna de


resultados que queramos (por su posición, empezando por 0):
for
for cliente
cliente in
in filas:
filas:
print("Nombre:
print("Nombre: {0}, {0},Apellido:
Apellido: {1}".format(cliente[1],
{1}".format(cliente[1], cliente[2]))
cliente[2]))

• Esto retorna el nombre y el apellido del cliente, porque la columna 1 tiene el


ID, pero la columna 2 (cliente[1] en este código de ejemplo), trae el nombre, y
la 3 tiene el apellido.
INSERT Y UPDATE
• De forma parecida funciona la sentencia para hacer un INSERT o UPDATE.
sentencia.execute("INSERT
sentencia.execute("INSERTINTOINTO persona
persona (nombre,
(nombre, apellido,
apellido, edad)
edad) VALUES
VALUES (:1,
(:1, :2,
:2, :3)",
:3)",
(nombre,
(nombre, apellido,
apellido, edad))
edad))

sql
sql == '''UPDATE
'''UPDATE persona
persona SET
SETnombre
nombre == :nom,
:nom, apellido
apellido == :ape,
:ape, edad
edad == :edad
:edad
WHERE id = :id'''
WHERE id = :id'''
sentencia.execute(sql,
sentencia.execute(sql, nom=nombre,
nom=nombre, ape=apellido,
ape=apellido, edad=edad,
edad=edad, id=opcion)
id=opcion)

• Quizás te preguntes qué son esos valores al lado de los “:”, como los
números y nombres.
• Es importante saber cómo entregar los valores a la sentencia String SQL que
hayamos hecho. Debe hacerse a través de parámetros.
PARÁMETROS DENTRO DE UN SQL
• Por un tema de seguridad, NUNCA debes hacer una sentencia SQL
concatenando sus valores con una variable. Un ejemplo de esto sería:
sentencia.execute("UPDATE
sentencia.execute("UPDATE persona
persona SET
SET nombre
nombre == '"'" ++ nombre
nombre ++ "'")
"'")

• Este tipo de sentencias, si bien funcionan, dejan una brecha de seguridad


abierta, y de aquí nacen las famosas inyecciones SQL.
• Por esta razón, todas las APIs de lenguajes de programación proveen una
forma de entregar los valores al SQL a través de parámetros.
PARÁMETROS DENTRO DE UN SQL
• La API de Python ofrece 5 formas distintas de entregar valores a través de
nuestras variables al SQL.

• Pero cx_Oracle solo acepta 2 de ellas: numeric y named.


PARAMETRIZACIÓN NAMED
• Puedes pasarle parámetros a un SQL utilizando nombres.
sql
sql == '''UPDATE
'''UPDATE persona
persona SET
SETnombre
nombre == :nom,
:nom, apellido
apellido == :ape,
:ape, edad
edad == :edad
:edad
WHERE id = :id'''
WHERE id = :id'''
sentencia.execute(sql,
sentencia.execute(sql, nom=nombre,
nom=nombre, ape=apellido,
ape=apellido, edad=edad,
edad=edad, id=opcion)
id=opcion)

• En esta sentencia, se están asignando los parámetros :nom, :ape, :edad y :id.
• Para darles un valor real a estos parámetros, dentro del método execute, justo
después del primer parámetro (que es el SQL), empezaremos a separar por comas e
indicar el valor que asumirán.
• nom = nombre; está indicando que :nom asumirá el valor de la variable nombre.
También podríamos decir algo como-> nom=“Pedro”, ape=“Pérez”.
• Esto formará una sentencia final que reemplazará los :algo con valores reales.
PARAMETRIZACIÓN NUMERIC
• De una forma similar funcionan los parámetros numeric, solo que estos
responderán al orden en que entregamos los valores.
sentencia.execute("INSERT
sentencia.execute("INSERTINTOINTO persona
persona (nombre,
(nombre, apellido,
apellido, edad)
edad) VALUES
VALUES (:1,
(:1, :2,
:2, :3)",
:3)",
(nombre, apellido, edad))
(nombre, apellido, edad))

• En este ejemplo, :1 asumirá el valor de la primera variable que pasemos entre


paréntesis justo después de la coma que separa al primer parámetro String
que contiene el SQL.
• Así que, :1 tomará el valor de la variable nombre, :2 de apellido y :3 de edad.
MÉTODO COMMIT()

• Como las bases de datos de Oracle son 100% transaccionales (es decir, que
no terminan de confirmar un cambio a menos que tú se lo digas usando la
sentencia commit de SQL), tus cambios no estarán confirmados hasta que
llames al método commit().
• Este método lo que hace es ejecutar una sentencia SQL commit.
EJERCICIO 1
• Crea una tabla en Oracle que tenga tipos de datos numéricos y de texto.
• Crea un nuevo proyecto en PyCharm y crea un archivo que logre que
conectarse a la Base de Datos
• Una vez lista la conexión, prueba a obtener todos los resultados de una tabla.
• Luego, intenta hacer un select con where, y aquí utiliza la parametrización.
• Prueba a insertar un registro y también borrarlo.
• Finalmente, prueba a actualizar un registro con una condición where.
EJERCICIO 2
• Crea un nuevo proyecto en PyCharm.
• Esta vez, crea una clase específica para acceder a la conexión con Oracle
• Crea un archivo distinto para tener un menú con el que el usuario pueda
interactuar con ciertas acciones hacia la base de datos.
• Crea modelos de clases para ir dejando en dichos modelos, los métodos
correspondientes a cada tabla. Por ejemplo, si tienes una clase Alumno, que
ahí estén los métodos para leer, insertar, actualizar y borrar registros de la
tabla alumno.

También podría gustarte