Advertisement
Guest User

Untitled

a guest
Jul 23rd, 2019
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.79 KB | None | 0 0
  1. # -*- coding: utf-8 -*-
  2. # coding: utf-8
  3. """
  4. Estructura de modelo de conexion a una BBDD
  5. """
  6.  
  7. # -----------------------------------------------------------------------
  8. # Imports
  9. # -----------------------------------------------------------------------
  10. from abc import ABC, abstractmethod
  11.  
  12.  
  13. class AbstractBBDD(ABC):
  14.  
  15. def __init__(self, config: dict, as_dict: bool = False):
  16. """
  17. Constructor de la clase de conexion a SQLServer.
  18.  
  19. Args:
  20. config (dict): Diccionario de configuracion. Debe contener el "host" y la "database" al que conectar.
  21. as_dict (:obj:`bool`, optional): Indicar si los resultados del cursor deben devolverse en list o dict.
  22. Su valor por defecto es False.
  23.  
  24. Returns:
  25. AbstractBBDD: nuevo objeto clase SqlServerTCK.
  26.  
  27. """
  28. self.__config = config
  29. self.__as_dict = as_dict
  30. super().__init__()
  31.  
  32. @classmethod
  33. @abstractmethod
  34. def load_from_file(cls, path_config: str):
  35. """
  36. Funcion para cargar la clase con los valores necesarios desde un fichero de config
  37.  
  38. Args:
  39. path_config (str): Valor a parsear para convertirlo a formato SQLServer
  40.  
  41. Returns:
  42. AbstractBBDD: Devuelve el constructor de la clase
  43. """
  44. raise NotImplementedError()
  45.  
  46. @classmethod
  47. @abstractmethod
  48. def load_from_dict(cls, config: dict):
  49. """
  50. Funcion para cargar la clase con los valores necesarios desde un dict
  51.  
  52. Args:
  53. config (dict): Valor a parsear para convertirlo a formato SQLServer
  54.  
  55. Returns:
  56. AbstractBBDD: Devuelve el constructor de la clase
  57. """
  58. raise NotImplementedError()
  59.  
  60. @abstractmethod
  61. def config(self):
  62. """
  63. Obtener la configuracion usada para conectar a la BBDD
  64.  
  65. Returns:
  66. config (dict): Devuelve un diccionario de Python con toda la configuración
  67. """
  68. return self.__config
  69.  
  70. @staticmethod
  71. def __parser(value) -> str:
  72. """
  73. Parsea una variable/valor de Python para introducirlo dentro de una query de SQLServer
  74.  
  75. Args:
  76. value (Any): Valor a parsear para convertirlo a formato SQLServer
  77.  
  78. Returns:
  79. str: Valor resultante parseado
  80. """
  81. if value is None:
  82. return u"NULL"
  83. elif type(value) is int:
  84. return u"'" + (u"{0}".format(value)).replace("'", "''") + u"'"
  85. elif type(value) is bool:
  86. return u"{0}".format("1" if value else "0")
  87. else:
  88. return u"'" + (u"{0}".format(value).replace("'", "''")) + u"'"
  89.  
  90. @abstractmethod
  91. def run_query(self, sql_query: str):
  92. """
  93. Ejecutar una query en SQLServer devolviendo los resultados como lista de tuplas (o de diccionarios,
  94. dependiendo de si se ha indicado el parametro as_dict en el constructor)
  95.  
  96. Args:
  97. sql_query (str): Query a ejecutar
  98.  
  99. Returns:
  100. (:obj:`list`, :obj:`dict`): Valores devueltos por la query. Si no hay valores que devolver,
  101. se devuelve una lista vacia
  102. """
  103. raise NotImplementedError()
  104.  
  105. @abstractmethod
  106. def exec_procedure(self, procedure, params={}, db=None):
  107. """
  108. Ejecutar un procedimiento almacenado
  109.  
  110. Args:
  111. procedure (str): Nombre del procedure (solo el nombre, sin incluir schema, db...)
  112. params (dict): Diccionario con los parametros a incluir en la ejecucion del procedure.
  113. Las claves deben coincidir exactamente con el nombre de los parametros del procedure
  114. db (str): La Base de Datos donde se encuentra el procedure. Si no se indica,
  115. se coge la pasada en el constructor
  116.  
  117. Returns:
  118. (:obj:`list`, :obj:`dict`): Valores devueltos por la query. Si no hay valores que devolver,
  119. se devuelve una lista vacia
  120. """
  121. raise NotImplementedError()
  122.  
  123. @abstractmethod
  124. def insert_tuples(self, headers, elements, table, db=None):
  125. """
  126. Insertar una lista de tuplas en una tabla
  127.  
  128. Args:
  129. headers (list): Lista de nombres de las columnas de la tabla.
  130. Es importante que se respete el orden respecto a elements
  131. elements (list[Tuple]): La lista de tuplas (o lista de listas) a insertar.
  132. Es importante que se respete el orden respecto a headers
  133. table (str): Nombre de la tabla donde insertar (solo el nombre, sin incluir schema, db...)
  134. db (str): La Base de Datos donde se encuentra el procedure.
  135. Si no se indica, se coge la pasada en el constructor
  136.  
  137. Returns:
  138. int: Numero de filas insertadas satisfactoriamente
  139. """
  140. raise NotImplementedError()
  141.  
  142. @abstractmethod
  143. def insert_dicts(self, dicts, table, db=None):
  144. """
  145. Insertar una lista de tuplas en una tabla
  146.  
  147. Args:
  148. dicts (list[dict]): La lista de tuplas (o lista de listas) a insertar.
  149. Es importante que se respete el orden respecto a headers
  150. table (str): Nombre de la tabla donde insertar (solo el nombre, sin incluir schema, db...)
  151. db (str): La Base de Datos donde se encuentra el procedure.
  152. Si no se indica, se coge la pasada en el constructor
  153.  
  154. Returns:
  155. int: Numero de filas insertadas satisfactoriamente
  156. """
  157. raise NotImplementedError()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement