Conexión de base de datos Oracle en Python

A veces, como parte de la programación, requerimos trabajar con las bases de datos porque queremos almacenar una gran cantidad de información, por lo que usamos bases de datos, como Oracle, MySQL, etc. Entonces, en este artículo, discutiremos la conectividad de la base de datos Oracle usando Python. Esto se puede hacer a través del nombre del módulo cx_Oracle

Base de datos Oracle 
Para comunicarnos con cualquier base de datos a través de nuestro programa Python, necesitamos un conector que no es más que el módulo cx_Oracle .

Para instalar cx-Oracle: 

Si está utilizando Python> = 3.6, use el siguiente comando en Linux: –

pip install cx-Oracle

Si está utilizando Python> = 3.6, use el siguiente comando en Windows: –

py -m pip install cx-Oracle

Con este comando, puede instalar el paquete cx-Oracle, pero primero debe instalar la base de datos Oracle en su PC.
 

  • Importar módulo específico de base de datos 
    Ex. importar cx_Oracle
  • connect(): ahora establezca una conexión entre el programa Python y la base de datos Oracle utilizando la función connect(). 
     
con = cx_Oracle.connect('username/password@localhost')
  • cursor(): Para ejecutar una consulta SQL y proporcionar resultados se requiere algún objeto especial que no es más que un objeto cursor().
     
cursor = cx_Oracle.cursor()
  • ejecutar/ejecutar muchos método:
     

cursor.execute(sqlquery) – – – -> para ejecutar una única consulta. 
cursor.executemany(sqlqueries) – – – -> para ejecutar una sola consulta con múltiples variables de vinculación/marcadores de posición.

  • commit(): para consultas DML (lenguaje de manipulación de datos) que comprenden operaciones como actualizar, insertar, eliminar. Necesitamos commit() y luego solo el resultado se refleja en la base de datos.
  • buscar(), buscar muchos (int), buscar():
    1. fetchone() : este método se usa para obtener una sola fila desde la parte superior del conjunto de resultados.
    2. fetchmany(int): este método se utiliza para obtener un número limitado de filas en función del argumento que se le pasa.
    3. fetchall() : este método se usa para obtener todas las filas del conjunto de resultados.
  • close(): después de todo hecho, es obligatorio cerrar todas las operaciones.
     
cursor.close()
con.close()

1. Creación de tabla

Python3

# importing module
import cx_Oracle
 
# Create a table in Oracle database
try:
 
    con = cx_Oracle.connect('tiger/scott@localhost:1521/xe')
    print(con.version)
 
    # Now execute the sqlquery
    cursor = con.cursor()
 
    # Creating a table employee
    cursor.execute("create table employee(empid integer primary key, name varchar2(30), salary number(10, 2))")
 
    print("Table Created successfully")
 
except cx_Oracle.DatabaseError as e:
    print("There is a problem with Oracle", e)
 
# by writing finally if any error occurs
# then also we can close the all database operation
finally:
    if cursor:
        cursor.close()
    if con:
        con.close()

Producción: 

Table Created successfully

Las declaraciones DDL no requieren confirmación. Se comprometen automáticamente. En el programa anterior, he usado el método execute() para ejecutar una instrucción SQL.

2. Insertar un registro en la tabla usando el método de ejecución()

Python3

# importing module
import cx_Oracle
 
# Inserting a record into a table in Oracle database
try:
    con = cx_Oracle.connect('tiger/scott@localhost:1521/xe')
    cursor = con.cursor()
     
    #con.autocommit = True
    # Inserting a record into table employee
    cursor.execute('insert into employee values(10001,\'Rahul\',50000.50)')
 
    # commit() to make changes reflect in the database
    con.commit()
    print('Record inserted successfully')
 
except cx_Oracle.DatabaseError as e:
    print("There is a problem with Oracle", e)
 
# by writing finally if any error occurs
# then also we can close the all database operation
finally:
    if cursor:
        cursor.close()
    if con:
        con.close()

Producción: 

Record inserted successfully

Una vez que ejecutamos cualquier instrucción DML, es necesario confirmar la transacción. Puede realizar una transacción de 2 maneras: –

  1. con.commit(). Esto se utiliza para confirmar una transacción manualmente.
  2. con.autocommit = Verdadero. Esto se utiliza para confirmar una transacción automáticamente.

3. Insertar múltiples registros en una tabla usando el método executemany()

Python3

import cx_Oracle
 
# Load data from a csv file into Oracle table using executemany
try:
    con = cx_Oracle.connect('tiger/scott@localhost:1521/xe')
 
except cx_Oracle.DatabaseError as er:
    print('There is an error in Oracle database:', er)
 
else:
    try:
        cur = con.cursor()
        data = [[10007, 'Vikram', 48000.0], [10008, 'Sunil', 65000.1], [10009, 'Sameer', 75000.0]]
 
        cur = con.cursor()
        # Inserting multiple records into employee table
        # (:1,:2,:3) are place holders. They pick data from a list supplied as argument
        cur.executemany('insert into employee values(:1,:2,:3)', data)
 
    except cx_Oracle.DatabaseError as er:
        print('There is an error in Oracle database:', er)
 
    except Exception as er:
        print(er)
 
    else:
        # To commit the transaction manually
        con.commit()
        print('Multiple records are inserted successfully')
 
finally:
    if cur:
        cur.close()
    if con:
        con.close()

Producción:  

Multiple records are inserted successfully

Puede haber ocasiones en las que sea necesario ejecutar una instrucción SQL varias veces en función de los diferentes valores que se le proporcionen cada vez. Esto se puede lograr usando el método executemany(). Proporcionamos una lista que contiene una lista de valores que reemplazarán los marcadores de posición en una consulta SQL que se ejecutará. 

Del caso anterior

  • :1 se sustituye por el valor 10007
  • :2 se sustituye por el valor ‘Vikram’
  • :3 se sustituye por el valor 48000.0

Y así sucesivamente (siguiente lista de valores en una lista dada)

Del mismo modo, puede proporcionar una lista de diccionarios. Pero en lugar del marcador de posición, usaremos la variable de vinculación (discutida más adelante).

4. Ver el conjunto de resultados de una consulta de selección usando fetchall(), fetchmany(int), fetchone()

Python3

import cx_Oracle
 
try:
    con = cx_Oracle.connect('tiger/scott@localhost:1521/xe')
 
except cx_Oracle.DatabaseError as er:
    print('There is an error in the Oracle database:', er)
 
else:
    try:
        cur = con.cursor()
 
        # fetchall() is used to fetch all records from result set
        cur.execute('select * from employee')
        rows = cur.fetchall()
        print(rows)
 
        # fetchmany(int) is used to fetch limited number of records from result set based on integer argument passed in it
        cur.execute('select * from employee')
        rows = cur.fetchmany(3)
        print(rows)
 
        # fetchone() is used fetch one record from top of the result set
        cur.execute('select * from employee')
        rows = cur.fetchone()
        print(rows)
 
    except cx_Oracle.DatabaseError as er:
        print('There is an error in the Oracle database:', er)
 
    except Exception as er:
        print('Error:'+str(er))
 
    finally:
        if cur:
            cur.close()
 
finally:
    if con:
        con.close()

Producción:

[(10001, 'Rahul', 50000.5), (10002, 'Sanoj', 40000.75), (10003, 'Soumik', 30000.25), (10004, 'Sayan', 45000.0), (10005, 'Sobhan', 60000.1), (10006, 'Gururaj', 70000.0), (10007, 'Vikram', 48000.0), (10008, 'Sunil', 65000.1), (10009, 'Sameer', 75000.0)]
[(10001, 'Rahul', 50000.5), (10002, 'Sanoj', 40000.75), (10003, 'Soumik', 30000.25)]
(10001, 'Rahul', 50000.5)

En el programa anterior, hemos utilizado 3 métodos 

  1. fetchall() : fetchall () se utiliza para obtener todos los registros del conjunto de resultados.
  2. fetchmany(int) : fetchmany  (int) se utiliza para obtener el número limitado de registros del conjunto de resultados en función del argumento entero pasado en él.
  3. fetchone() : fetchone  () se utiliza para obtener un registro de la parte superior del conjunto de resultados.

5. Ver el conjunto de resultados de una consulta de selección utilizando la variable de vinculación

Python3

import cx_Oracle
 
try:
    con = cx_Oracle.connect('tiger/scott@localhost:1521/xe')
 
except cx_Oracle.DatabaseError as er:
    print('There is error in the Oracle database:', er)
 
else:
    try:
        cur = con.cursor()
 
        cur.execute('select * from employee where salary > :sal', {'sal': 50000})
        rows = cur.fetchall()
        print(rows)
 
    except cx_Oracle.DatabaseError as er:
        print('There is error in the Oracle database:', er)
 
    except Exception as er:
        print('Error:', er)
 
    finally:
        if cur:
            cur.close()
 
finally:
    if con:
        con.close()

Producción:

[(10001, 'Rahul', 50000.5), (10005, 'Sobhan', 60000.1), (10006, 'Gururaj', 70000.0),
 (10008, 'Sunil', 65000.1), (10009, 'Sameer', 75000.0)]

En este caso, he pasado un diccionario en el método de ejecución(). Este diccionario contiene el nombre de la variable de vinculación como clave y su valor correspondiente. Cuando se ejecuta la consulta SQL, el valor de la clave se sustituye en lugar de la variable de vinculación.

Publicación traducida automáticamente

Artículo escrito por niranjan shukla y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *