IIC2413 / Syllabus-2021-2

Contenido del curso Bases de datos del DCC PUC versión 2021-2
62 stars 44 forks source link

Acceso a DB desde clase Model #261

Open tomytable opened 3 years ago

tomytable commented 3 years ago

Hola, tengo la duda de cómo poder acceder a la data base desde los métodos de la clase Model. Esto para poder efectuar los cambios y commitearlos. ¿Puedo asumir que al inicializar la clase se le da como un atributo? Y si no ¿Cómo establezco la conexión?

Gracias

rjherrera commented 3 years ago

Hola! Parte de lo que tienen que hacer en el control es ver la mejor forma de manejar las conexiones y los cursores, no debería ser necesario que fuera un atributo. Te recomiendo pensar si tiene sentido abrir una conexión por instancia o no y ver si eso afecta a dónde harías la conexión.

tomytable commented 3 years ago

Hola, sigo sin entender, mi idea era establecer la conexión en el init y luego comitear en cada atributo. No sé si me puedes dar algún otro hint de cómo acceder a la conexión. Estaba pensando que cómo el único lugar en donde establecí la conexión fue para crear la DB en el archivo _dbinit.py pero entonces tengo que importarla en el archivo models? e incluso así no podría acceder a esta desde los atributos cuando estoy definiendo la clase si no se lo di como parámetro antes :cold_sweat:

rjherrera commented 3 years ago

el db_init y el models pueden trabajar independientemente, así que no es necesario que importes la conexión de un lado al otro. Ahora, si bien te puede funcionar tener una conexión creada en el init, quiere decir que cada vez que se instancie tu clase, se va a abrir una nueva conexión, trata de pensar cómo esto te va a afectar a la hora de abordar el punto 3 del control.

Como hint te digo que tienes la libertad de hacer lo que quieras en el archivo models, puedes tener variables de clase, variables fuera de las clases, etc.

chubretovic commented 3 years ago

junto con esto, me gustaría saber si la interacción entre base de datos y código es exclusivamente a partir de la clase model, o puede haber interacción de entre las clases hijas con la base de datos?

rjherrera commented 3 years ago

@chubretovic ahí depende de cómo lo programes. No es razonable que se instancie la clase model porque no se refiere a una tabla, las que se van a instanciar son las clases que heredan de model, y ellas deberían interactuar con la db. De todas formas, lo más simple es que la interacción sea definida en la clase model, porque los métodos no cambian entre una clase y otra, es decir si tienes una clase Distrito que hereda de Model, y otra Convencional que también hereda de Model, no tiene sentido programar por ejemplo el create en ambas subclases, sino que lo más obvio es hacerlo en Model.