Python - Problemas con cx_Oracle

 
Vista:
sin imagen de perfil

Problemas con cx_Oracle

Publicado por Diego (1 intervención) el 21/08/2021 06:43:58
Tengo un problema, tengo este archivo en Python, de esta manera se ejecuta correctamente sin ningun problema, pero cuando quiero llamar de una clase externa a la clase connect(), me aparece un error por el atributo conexion, me dice que no existe y por este motivo no me deja conectar, gracias.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import cx_Oracle
 
class connect():
 
    def __init__(self):
        host = "localhost"
        user = "system"
        passw = "1234"
        tsname = "xe"
 
        try:
            self.conexion = cx_Oracle.connect(user, passw, host+"/"+tsname)
        except Exception as error:
            print("No se pudo conectar a la base de datos. Error: ")
        else:
            print("Conexion Establecida!!!")
 
    def sentenciaCompuesta(self, sentencia):
        cursor = self.conexion.cursor()
        cursor.execute(sentencia)
        datos = cursor.fetchall()
        cursor.close
        return datos
 
    def close(self):
        self.conexion.close()
 
    def commint(self):
        self.conexion.commit()
 
    def sentenciaSimple(self, sentencia):
        cursor = self.conexion.cursor()
        cursor.execute(sentencia)
        cursor.close()
 
if __name__ == "__main__":
    conexion = connect()
    for fila in conexion.sentenciaCompuesta("select sysdate from dual"):
        print(fila)
    conexion.close()

Este es el error que me aparece:
Capture

La clase de la cual la quiero llamar es la siguiente:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from http import HTTPStatus
from flask import Blueprint, Response, request, render_template, url_for
from database.connect_db import connect
 
products = Blueprint("products", __name__, url_prefix="/products")
shopCar = Blueprint("shopcar", __name__, url_prefix="/shopcar")
 
PRODUCTS_TITLE = "<h1> Products </h1>"
RESPONSE_BODY = {"message": "", "data": [], "errors": [], "metadata": []}
 
@products.route("/", methods=["GET"])
def show_product():
    conexion = connect()
    conexion.close()
    return PRODUCTS_TITLE, HTTPStatus.OK
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de algoritmo
Val: 819
Bronce
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Problemas con cx_Oracle

Publicado por algoritmo (240 intervenciones) el 21/08/2021 17:38:45
Hola

Sin conocer cx_Oracle, al leer tu código, yo habría escrito:

1) En la fila 10, previo a try: self.conexion = None
2) En la fila 26:
1
2
if self.conexion:
    self.conexion.close()

De ese modo, cubro la posibilidad de que no exista self.conexion, al haberse producido un error.

Espero que te sirva :)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 2.808
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Problemas con cx_Oracle

Publicado por tincopasan (937 intervenciones) el 21/08/2021 18:23:04
el principal problema que estás teniendo es que la clase y su código están para usarse dentro del archivo principal en ejecución, para eso usas if __name__ == "__main__":, o definis su uso en la invocación o eliminas esa línea para importar los métodos. ya que lo querés usar como un módulo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
-1
Comentar