-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbase_datos.py
159 lines (150 loc) · 5.48 KB
/
base_datos.py
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
# -*- coding: utf-8 -*-
import pymysql
class Base_datos:
"""
@name Base_Datos
@description clase Modelo para realizar conexiones a bases de datos: MySQL/MariaDB
@author G. Mizael Mtz Hdz
@link http://witsoftplus.com/
"""
def __init__(self):
""" Constructor para iniciar la clase de Base_datos
Returns: void
"""
self.__host="";
self.__usuario="";
self.__password="";
self.__bd="";
self.__conector=None
def setCredenciales(self, host, usuario, password, bd):
""" Método para establecer las credenciales para conectarse al servidor de base de datos
Parameters:
host (str): nombre del host (servidor)
usuario (str): nombre del usuario
password (str): password del usuario del host (servidor)
bd (str): nombre de la base de datos a la cual se quiere realizar la conexión
Returns: void
"""
self.__host=host;
self.__usuario=usuario;
self.__password=password;
self.__bd=bd;
def __conectar(self):
""" Método privado para conectarse con el servidor y establecer la variable self.__connect con la conexión activa
Returns: void
"""
if self.__conector is None:
try:
self.__conector = pymysql.connect(
host=self.__host,
user=self.__usuario,
password=self.__password,
db=self.__bd)
self.__conector.autocommit(True)
except ():
self.__conector=None
def select(self, tabla, where=None):
""" Método para realizar una consulta a la base de datos
Parameters:
tabla (str): nombre de la tabla a la que se le quiere hacer la consulta
where (list): lista con los filtros que tendrá la consulta, tomando en cuenta que cada elemento de la lista, debe tener el siguiente formato:
{
"campo",
"condicion",
"valor"
}
Returns: resultado(list | None): resultado de realizar la consulta a la tabla proporcionada y a los filtros proporcionados
"""
resultado=None
try:
self.__conectar();
try:
str_where="";
if(where is not None):
for fila in where:
str_where=str_where+fila["campo"]+fila["condicion"]+fila["valor"]+" AND "
str_where=str_where[:-4]
with self.__conector.cursor() as cursor:
query="SELECT * FROM %s"%(tabla);
if(str_where!=""):
query=query+" WHERE %s"%(str_where);
print(query)
cursor.execute(query)
resultado = cursor.fetchall()
except Exception as e:
print(e)
finally:
pass#self.__conector.close()
except (pymysql.err.OperationalError, pymysql.err.InternalError) as e:
print("Ocurrió un error al conectar: ", e)
return resultado
def insert(self, tabla, campos, valores):
""" Método para realizar un insert a la tabla proporcionada en la base de datos
Parameters:
tabla (str): nombre de la tabla a la que se le quiere hacer el insert
campos (list): lista con str, con el nombre de los campos que se tomarán en cuenta en el insert
valores (list): lista con str, con el nombre de los valores de los campos que se tomarán en cuenta en el insert
Returns: resultado(list | None): resultado de realizar la consulta a la tabla proporcionada y a los filtros proporcionados
"""
try:
self.__conectar();
with self.__conector.cursor() as cursor:
str_campos=", ".join(campos);
str_valores=", ".join(valores);
consulta = "INSERT INTO %s(%s) VALUES (%s)"%(tabla,str_campos, str_valores)
print(consulta);
cursor.execute(consulta)
self.__conector.commit()
finally:
pass#self.__conector.close()
def update(self, tabla, edicion, where):
""" Método para realizar una edición a uno o más registros de una tabla
Parameters:
tabla (str): nombre de la tabla a la que se le quiere hacer el UPDATE
edicion (list): lista con str, con el nombre de los campos que se tomarán en cuenta en el insert
valores (list): lista con str, con el nombre de los valores de los campos que se tomarán en cuenta en el insert
Returns: resultado(list | None): resultado de realizar la consulta a la tabla proporcionada y a los filtros proporcionados
"""
try:
self.__conectar();
with self.__conector.cursor() as cursor:
str_edicion="";
for campo in edicion:
str_edicion=str_edicion+campo+"="+edicion[campo]+","
str_edicion=str_edicion[:-1]
str_where="";
for campo in where:
str_where=str_where+campo+"="+where[campo]+","
str_where=str_where[:-1]
consulta = "UPDATE %s SET %s WHERE %s"%(tabla, str_edicion, str_where)
print(consulta);
cursor.execute(consulta)
self.__conector.commit()
finally:
pass#self.__conector.close()
def delete(self, tabla, where):
""" Método para eliminar registro(s) de una tabla en específico
Parameters:
tabla (str): nombre de la tabla a la que se le quiere hacer el DELETE
where (dict): Diccionario con las claves valor de los campos y su contenido que se utilizará como filtro para eliminar registros
Returns: void
"""
try:
self.__conectar();
str_where="";
for campo in where:
str_where=str_where+campo+"="+where[campo]+","
str_where=str_where[:-1]
with self.__conector.cursor() as cursor:
consulta = "DELETE FROM %s WHERE %s"%(tabla, str_where)
print(consulta);
cursor.execute(consulta)
self.__conector.commit()
finally:
pass#self.__conector.close()
def close_connection(self):
""" Método para cerrar la conexión con el servidor de base de datos
Returns: void
"""
if(self.__conector is not None):
self.__conector.close();