Warning: This information may be outdated. Please note the date of the post.

Objetivo

Realización de una aplicación web en cualquier lenguaje que conecte con el servidor ORACLE tras autenticarse y muestre alguna información almacenada en el mismo.

Requisitos

  • Máquina virtual con Centos8. En este caso he usado virt-manager para la virtualización del Centos8 desde esta imagen. Esta máquina cuenta con una interfaz de red puente a la máquina anfitriona.

  • Una segunda máquina virtual. Puedes usar una clonación de la primera despues de la instalación de Oracle para amenizar el trabajo.

Primeros pasos

Para acortar un poco la documetación he dividido este post en varios, así que antes de comenzar a hacer la aplicación web se han seguido estos pasos:

  1. Instalacion de Oracle sobre CentOS8

  2. Habilitar el acceso remoto a la base de datos

Aplicacion web que conecte con ORACLE

Vamos a usar la máquina servidor con CentOS 8 para crear la aplicación.

Entorno de trabajo con python

  • Tenemos que tener instalado python3
dnf install python3 -y
python3 -V

#Salida:
Python 3.6.8
  • Instalamos las herramientas de desarrollo en CentOS
dnf -y groupinstall development
  • Configuramos un entorno virtual
mkdir entornos
cd entornos
python3 -m venv mientorno
  • Actualizamos e instalamos el paquete para interactuar con oracle con python
[centos@localhost entornos]$ source mientorno/bin/activate

(mientorno) [centos@localhost entornos]$ pip install --upgrade pip
Collecting pip
  Downloading https://files.pythonhosted.org/packages/fe/ef/60d7ba03b5c442309ef42e7d69959f73aacccd0d86008362a681c4698e83/pip-21.0.1-py3-none-any.whl (1.5MB)
    100% |████████████████████████████████| 1.5MB 1.0MB/s 
Installing collected packages: pip
  Found existing installation: pip 9.0.3
    Uninstalling pip-9.0.3:
      Successfully uninstalled pip-9.0.3
Successfully installed pip-21.0.1

(mientorno) [centos@localhost entornos]$ pip freeze

(mientorno) [centos@localhost entornos]$ deactivate

(mientorno) [centos@localhost entornos]$ pip install cx_Oracle
Collecting cx_Oracle
  Using cached cx_Oracle-8.1.0-cp36-cp36m-manylinux1_x86_64.whl (803 kB)
Installing collected packages: cx-Oracle
Successfully installed cx-Oracle-8.1.0

Aplicación simple en python

  • Creamos una carpeta de trabajo y creamos el app.py
(mientorno) [centos@localhost entornos]$ mkdir app_oracle
(mientorno) [centos@localhost entornos]$ cd app_oracle/
(mientorno) [centos@localhost app_oracle]$ nano app.py
(mientorno) [centos@localhost app_oracle]$ 

app.py

import cx_Oracle

connection = cx_Oracle.connect(
    user="c##celia",
    password="celia",
    dsn="localhost/ORCLCDB")


print("\n Enhorabuena estás conectad@ a la base de datos!!!!")

cursor = connection.cursor()

# Consultas

# Mostrar todas las tablas

print("\n TABLAS DISPONIBLES")

print(" ")
cursor.execute("select * from cat")
res = cursor.fetchall()

for linea in res:
    linea = list(linea)
    print(linea[0])

# Mostrar los registros de una tabla en concreto 

print("Mostrar registros ")

print(" ")

tabla=str(input("¿De qué tablas quieres mostrar los registros?"))

if tabla.upper() == 'ALUMNOS':

    cursor.execute("select * from alumnos")
    res = cursor.fetchall()

    for linea in res:
        print(linea)

elif tabla.upper() == "CURSOS":

    cursor.execute("select * from cursos")
    res = cursor.fetchall()

    for linea in res:
        print(linea)

elif tabla.upper() == "MATRICULAS":

    cursor.execute("select * from matriculas")
    res = cursor.fetchall()

    for linea in res:
        print(linea)

else:
    print("tabla no registrada")

Este código es un código muy simple que si se ejecuta hace lo siguiente:

app.py

Aplicación web con flask, python y Oracle

Ahora vamos hacer una aplicación parecida pero sirviendola en internet con una plantilla.

  • Exportamos las variables pertinentes

[oracle@bd ~]$ export PYTHON_CONNECTSTRING=localhost/ORCLCDB
[oracle@bd ~]$ export PYTHON_PASSWORD=celia
[oracle@bd ~]$ export PYTHON_USERNAME=c##celia
  • El código lo puedes encontrar en el siguiente repositorio

Siendo propiamente el mismo este -> demo.py

Tenemos que instalar con pip install -r requirements, los paquetes que vienen en el fichero requirements.

  • Ejecutamos la app web
(mientorno) [oracle@bd app_oracle_flask]$ ls
demo.py  Procfile  README.md  requirements.txt  static  templates
(mientorno) [oracle@bd app_oracle_flask]$ python3 demo.py 
Connecting to localhost/ORCLCDB
 * Serving Flask app "demo" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://127.0.0.1:8080/ (Press CTRL+C to quit)
  • Vamos al navegador y comprobamos que funciona

captura de pantalla de la pagina funcionando

appweb.jpeg