Python - Conexion global base de datos

 
Vista:
sin imagen de perfil
Val: 6
Ha disminuido su posición en 20 puestos en Python (en relación al último mes)
Gráfica de Python

Conexion global base de datos

Publicado por Arsenio (2 intervenciones) el 26/03/2021 11:05:26
Gracias por leer el post. Soy aprendiz de programación con Python y estoy aprendiendo a crear conjunto CRUD.
He creado un objeto conexion en una funcion
1
2
3
def opcion_conectar():
	CRUD_conexion = sqlite3.connect('dbCRUD.db')
	CRUD_cursor = CRUD_conexion.cursor()

y otro función para cerrar

1
2
def opcion_salir():
		CRUD_conexion.close()

El problema es que cuando llamo a la función opcion_salir, me devuelve un error :

AttributeError: 'NoneType' object has no attribute 'close'

Entiendo que CRUD_conexion es una variable que contiene un objeto. He probado crear una variable global

CRUD_conexion = None, pero sigue sin reconocer el objeto. He buscado en varios tutoriales y no he sabido encontrar una respuesta. Tampoco en el foro.

Agradecería cualquier tipo de ayuda.

Cuidense!
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 joel
Val: 3.475
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Conexion global base de datos

Publicado por joel (901 intervenciones) el 26/03/2021 14:16:17
Hola Arsenio, se me ocurren varias opciones para hacerlo...
1.- utilizas una clase con self para las variables de crud
2.- las funciones tienen que devolver el objeto y tienes que pasarlo para poder gestionarlo
3.- utilizas variables globales.

Siguiendo tu ejemplo, lo he realizado utilizando variables globales

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import sqlite3
import ipdb
 
def opcion_conectar():
    global CRUD_conexion
    CRUD_conexion = sqlite3.connect('dbCRUD.db')
    #ipdb.set_trace()
    CRUD_cursor = CRUD_conexion.cursor()
 
def opcion_salir():
    global CRUD_conexion
    CRUD_conexion.close()
 
opcion_conectar()
opcion_salir()
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
sin imagen de perfil
Val: 6
Ha disminuido su posición en 20 puestos en Python (en relación al último mes)
Gráfica de Python

Conexion global base de datos

Publicado por Arsenio (2 intervenciones) el 26/03/2021 14:32:58
Muchísimas gracias. Entiendo tu respuesta. Creo que una clase sería la mejor solución. Desde el año 2000 no me he reciclado desde que trabajaba con Clipper. Ahora cn 79 años estos tratando de migrar una aplicación que hice a un amigo, con Python. En medio ha hecho algo con VB para Access (así entiendo con poco la POO) y en C++ principalmente para ARduino.

Python me parece mucho más sencillo que un lenguaje procedural orientado a la gestión de BdD.

Me pongo a trabajar con la clase siguiendo tus consejos, se me puedes dar alguna orientación me ahorrarás algún que ptro quebradero de cabeza.

¡Muchas gracias!
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
Imágen de perfil de joel
Val: 3.475
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Conexion global base de datos

Publicado por joel (901 intervenciones) el 26/03/2021 17:49:35
Ok, perfecto... si tienes cualquier duda...
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