1 00:00:00,000 --> 00:00:18,040 El último vídeo vamos a seguir o vamos a terminar de corregir el examen de la primera 2 00:00:18,040 --> 00:00:29,640 evaluación. Por fin. Lo único que nos quedaba ya era cómo leer esos ficheros JSON y dibujarlos 3 00:00:29,640 --> 00:00:42,720 en nuestro frame principal, en el main y guardarlos a la base de datos y ya estaría. Empezamos 4 00:00:42,720 --> 00:00:52,400 a hacer el loadJSON.py, ese fichero de Python que yo le he llamado loadJSON. Lo primero que 5 00:00:52,400 --> 00:01:00,520 hago es importar el tkinter as tk como siempre. Importamos todo lo que sea del tkinter, desde 6 00:01:00,520 --> 00:01:07,120 herramientas para coger los colores o la función de mi texto para escribir el texto con el 7 00:01:07,120 --> 00:01:16,880 formato y la fuente y el tamaño y como nosotros queramos. Mi información, el custom tkinter 8 00:01:16,880 --> 00:01:24,280 para meter widgets que sean más actuales. Tenemos que importar en este caso porque 9 00:01:24,280 --> 00:01:31,080 vamos a trabajar con JSON y luego el OS es por si queremos, el sistema operativo es por 10 00:01:31,080 --> 00:01:39,200 si queremos guardar información en nuestro disco duro. Vamos a nuestro sistema operativo. 11 00:01:39,800 --> 00:01:48,800 Menos lo del tkinter y JSON y el custom tk. Estos son los ficheros que hemos ido creando en los cuatro 12 00:01:48,800 --> 00:02:00,760 vídeos anteriores. Aquí, como también lo que quiero es grabarlo en la base de datos, tengo que 13 00:02:00,760 --> 00:02:14,920 importar esa clase que hemos hecho dentro del módulo de Python de base de datos. Import y le 14 00:02:14,920 --> 00:02:24,080 hemos llamado a ver que no me acuerdo mi base de datos, pues listo. Ahí la tenemos. Ya lo 15 00:02:25,080 --> 00:02:37,080 tenemos todo. Ahora empezamos a crearnos nuestra clase. La podemos llamar loadJSON. Recordar que 16 00:02:37,080 --> 00:02:44,920 tenemos dos JSON, uno que eran datos, otro que eran notas, que eso se los daba yo con el examen. En 17 00:02:44,920 --> 00:02:51,440 este caso no he heredo de nada, así que no pasamos ninguna información entre los paréntesis. Como 18 00:02:51,440 --> 00:03:04,000 siempre, el constructor init, guión bajo, guión bajo, self y aquí lo que le voy a pasar es dónde 19 00:03:04,000 --> 00:03:11,640 quiero dibujar esos datos que estamos leyendo. Se lo voy a pasar a una variable que se llama 20 00:03:11,640 --> 00:03:25,280 ventana. Con esto podemos empezar a trabajar. Lo primero que hago es crear una variable colores 21 00:03:28,760 --> 00:03:35,000 que sea de la clase colores aplicación para jugar con los mismos colores que 22 00:03:35,240 --> 00:03:48,920 tiene nuestra aplicación. Lo que hemos estado usando en todos los vídeos anteriores. 23 00:03:48,920 --> 00:04:11,560 ¿Qué más hago? En este caso en el examen dibujábamos un frame en la ventana principal 24 00:04:11,560 --> 00:04:20,680 y ahí dibujábamos los datos y luego abajo era la conexión con la base de datos de MySQL y era 25 00:04:20,680 --> 00:04:30,600 donde guardábamos esos datos que habíamos leído de los ficheros JSON. Voy a hacer eso. Vamos a 26 00:04:30,600 --> 00:04:40,560 coger un frame, vamos a crearnos una variable frame que va a ser de tipo ctkFrame para crear ese 27 00:04:40,560 --> 00:04:45,440 frame que os digo para dentro de la ventana principal separar lo que es la parte de lectura 28 00:04:45,440 --> 00:04:59,200 de JSON de lo que es la parte de escritura a MySQL. ¿Dónde lo quieres dibujar? Pues en 29 00:04:59,200 --> 00:05:07,640 ventana. Ventana recordar que es una variable que le estoy pasando a esta clase que la vamos a 30 00:05:07,640 --> 00:05:16,200 llamar desde clase ventana principal y que va a ser el main donde estamos dibujando toda la 31 00:05:16,200 --> 00:05:26,080 información. ¿El fgColor? Pues le vamos a decir que eso va a ser igual a ser punto colores y le 32 00:05:26,080 --> 00:05:45,280 vamos a pasar el color de cabecera para que tenga así un color similar. ¿Qué más le puedo pasar? 33 00:05:45,280 --> 00:05:54,000 El border color y en este caso pues le digo que me lo pongas como black. ¿Qué más le puedo pasar? 34 00:05:56,080 --> 00:06:04,720 Pues para que los frame tengan unas esquinas más redondeadas y no tengan como 90 grados, 35 00:06:04,720 --> 00:06:14,680 que sea los frame recordar que es ese cuadro, ese contenedor, ese canvas que estoy dibujando 36 00:06:14,680 --> 00:06:28,240 dentro del TKFrame. Entonces pues le podemos poner el corner, este radius, vamos a ponerlo a 12 por ejemplo. 37 00:06:28,240 --> 00:06:37,560 Luego ya sabéis que todo lo podemos cambiar. Hemos puesto el fg, vamos a ponerle el background, 38 00:06:37,560 --> 00:06:44,480 un color de background y ahí le voy a pasar pues el mismo que tiene el principal, entonces le vamos 39 00:06:44,480 --> 00:07:04,080 a pasar self, vamos a poner esto, self.colores.getPrincipal. ¿Qué más le podemos pasar? 40 00:07:08,240 --> 00:07:13,760 Yo creo que con esto ya nos vale y nos sobra. Luego ya vamos viendo más cosillas si es que 41 00:07:13,760 --> 00:07:21,800 nos hace falta. ¿Qué hago ahora? Empaquetar los frame.pack, acordaros que siempre el place, el pack, 42 00:07:21,800 --> 00:07:31,920 el grid, siempre hay que usarlo. Entonces en este caso le digo que lo complete en x, no en los dos, 43 00:07:31,920 --> 00:07:38,200 no en ambos, no en bot, en x solo para que me respete, para que me llene ese frame, le digo, 44 00:07:38,440 --> 00:07:49,080 le podemos meter un pack x para meter un margen interior y le puedo decir de 20 o un pack y un 45 00:07:49,080 --> 00:08:03,720 pack y pues de 20 también. Y en este punto ya tengo dibujado ese frame donde voy a dibujar 46 00:08:04,440 --> 00:08:14,760 la lectura de los ficheros JSON, de datos JSON y de notas JSON. ¿Entonces aquí qué le voy a 47 00:08:14,760 --> 00:08:25,640 hacer ahora? Pues le voy a decir, si os acordáis que cuando trabajamos con el tkframe jugamos con 48 00:08:25,640 --> 00:08:32,520 el column configure y el row configure, que es en el que decíamos cuántas columnas ibas a tener y 49 00:08:32,520 --> 00:08:54,920 cuántas filas ibas a tener. Entonces si nosotros cogemos y tenía el frame en este caso, pues con 50 00:08:55,040 --> 00:09:03,600 lo que yo os di en el examen, quiero recordar, o sería algo así similar a un tkframe que tendría 51 00:09:03,600 --> 00:09:12,080 un título que sería pues cargando datos.json o algo así, teníamos que escribir el nombre del 52 00:09:12,080 --> 00:09:19,400 fichero JSON1, el nombre del fichero JSON2, luego teníamos un botón que era cargar esos ficheros y 53 00:09:19,400 --> 00:09:24,880 entonces nos mostraba la información en dos cajas de texto y luego teníamos otro letrero, otro laber, 54 00:09:24,880 --> 00:09:32,440 que ponía salvando datos con otro botón que era para que me los escribiera. Creo recordar que era 55 00:09:32,440 --> 00:09:42,320 algo así. Entonces lo que voy a decirle es, con esa imagen que os puse en el examen, pues tendría 56 00:09:42,320 --> 00:09:49,120 un número de columnas, por ejemplo, si yo voy a poner dos cajas de texto en los que voy a leer los 57 00:09:49,120 --> 00:09:56,360 dos JSON, en los que voy a visualizar esos dos JSON, los datos del JSON, ya son dos columnas. 58 00:09:56,360 --> 00:10:06,160 Y luego con lo que os he dicho, había una etiqueta, una línea era una etiqueta, otra línea era 59 00:10:06,160 --> 00:10:11,520 para escribir el primer nombre del primer fichero JSON, otra línea para 60 00:10:11,520 --> 00:10:18,800 escribir el segundo nombre. Entonces contando esas líneas, todas las líneas que tendría mi fichero, 61 00:10:19,200 --> 00:10:28,080 pues me salen me parece un total de 6 o 7. Entonces vamos a coger y vamos a 62 00:10:31,000 --> 00:10:39,280 a ir haciendo el column configure y el row configure. Entonces ponemos con el 63 00:10:39,280 --> 00:10:49,480 configure, le digo cuántas columnas va a tener, por lo que os digo, vale 2, este va a ser 0 y 1. 64 00:10:50,280 --> 00:10:55,680 Y el tamaño, el peso que le vas a dar a cada una de esas, o sea, cómo lo va a repartir en cada 65 00:10:55,680 --> 00:11:02,240 una de esas. En este caso, siempre lo normal es pasarle el que sea proporcional a las dos 66 00:11:02,240 --> 00:11:08,120 columnas, que se reparta bien la información en las dos columnas. Ya tengo esto y vamos también 67 00:11:08,120 --> 00:11:24,920 con el frame punto, el row configure. En este caso, tenemos 7 filas, 0, 1, 2, 3, 4, 5, 6 y hasta 7. 68 00:11:24,920 --> 00:11:35,800 Y lo mismo de antes, el weight a 1. Y ya tenemos entonces como este frame que hemos 69 00:11:35,800 --> 00:11:45,520 creado aquí arriba, todo este frame, ya lo tienes hecho, ya le tienes configurado todas las filas en 70 00:11:45,520 --> 00:11:50,720 lo que lo has dividido y las columnas en lo que lo has dividido. En este caso, es dos columnas por 71 00:11:50,720 --> 00:12:03,040 siete filas. Seguimos, entonces lo primero era un label, entonces es el punto, vamos a llamarle 72 00:12:03,680 --> 00:12:16,760 título. Esto va a ser igual a que act label, porque es una etiqueta. ¿Qué es lo que le voy a decir? 73 00:12:16,760 --> 00:12:23,400 Que lo dibuje. ¿Dónde lo voy a decir? Que lo dibuje en ventana o en frame. En este caso, el frame es el 74 00:12:23,400 --> 00:12:28,200 que dibujo en ventana, en la ventana principal que se la estoy pasando a esta clase. Y nosotros, 75 00:12:28,200 --> 00:12:34,520 toda la información que estoy escribiendo aquí ahora, es la que le voy a dibujar en el frame. 76 00:12:34,520 --> 00:12:45,800 Entonces esto, lo primero que le paso es ubicación donde lo voy a dibujar. El texto, el segundo 77 00:12:45,800 --> 00:12:56,800 parámetro. ¿Qué es lo que quiero que me aparezca aquí? Pues cargando datos json. Y luego ya es, 78 00:12:56,800 --> 00:13:05,320 por ejemplo, la fuente. ¿Qué fuente voy a utilizar? Pues le voy a decir, pues me parece que eso también 79 00:13:05,320 --> 00:13:17,640 os lo di en el examen. Lo supongo que serían estas. Entonces sería el diucin, tamaño, la fuente, 80 00:13:17,640 --> 00:13:28,480 el tamaño. A 30 le podemos pasar el testColor, que este va a ser self.colores. Y le podemos pasar el de 81 00:13:30,280 --> 00:13:39,920 el color principal. El color principal no, porque este me suena también que no era con colores, 82 00:13:39,920 --> 00:13:48,320 era white. Lo puse todo en white. Entonces vamos a ponerle también el white para que veas que os 83 00:13:48,320 --> 00:14:04,880 quede igual que en el examen. Y le voy a dar un ancho al width. Vamos a ponerle 450. Y como siempre cuando 84 00:14:04,880 --> 00:14:16,560 yo escribo un widget, ¿qué es lo segundo que me falta? self.lblTítulo.grid. En este caso voy a usar el grid. 85 00:14:16,560 --> 00:14:28,040 Le voy a decir columnSpan igual a 2. Recordad que en este frame tengo dos columnas configuradas, 86 00:14:28,040 --> 00:14:34,720 así que le estoy diciendo, en la primera fila, la fila cero, esas dos columnas me las unes. ¿Y qué 87 00:14:34,720 --> 00:14:49,720 consigo con eso? Que me salga centrado. Vamos a meterle un pathX que sea igual. Yo creo que en 88 00:14:49,720 --> 00:15:02,000 este me va a dar igual. No le meto el pathX. Row igual a cero. Column igual. El column como lo 89 00:15:02,000 --> 00:15:14,280 hemos unido tampoco me hace falta. Vamos a meterle un par y que éste sí puede estar bien para que 90 00:15:14,280 --> 00:15:21,560 tengamos ese margen. Pero vamos, que eso tampoco es algo que te haga faltar. ColumnSpan sí y el row cero 91 00:15:21,560 --> 00:15:30,080 también. Vale, listo, ya lo tengo. Ya tengo el primer fichero. Vamos, el primer fichero, el primer 92 00:15:30,080 --> 00:15:36,800 widget que he cargado en el frame que he dibujado en la ventana principal. Acordaros siempre de cómo 93 00:15:36,800 --> 00:15:44,240 va ese orden. Vamos con el segundo. En el segundo lo que os he dicho es, en la primera columna sí 94 00:15:44,240 --> 00:15:50,960 que hay un letrero, pues que ponga fichero JSON1, por ejemplo, dos puntos me parece que eran en el 95 00:15:50,960 --> 00:15:58,240 examen. Y luego en la otra era un text en el que vas a escribir, un text, perdón, un entry en el que 96 00:15:58,240 --> 00:16:05,760 vas a escribir el nombre del fichero que quieres cargar. Pues venga, vamos a ello. Entonces aquí le 97 00:16:05,760 --> 00:16:22,760 ponemos el lbl. Aquí estamos, el punto lbl JSON1 es igual a ctk. Hemos dicho que el primero es una 98 00:16:22,760 --> 00:16:32,280 etiqueta, lbl, como antes. ¿Dónde vamos a dibujar la etiqueta? En frame, en este caso en el texto le 99 00:16:32,280 --> 00:16:48,560 voy a pasar fichero fichero JSON1, dos puntos. El texto no me acuerdo si era así o era otra 100 00:16:48,560 --> 00:16:57,040 cosa, pero sería algo similar, no sería un texto mucho más largo que éste. Como antes, la fuente, 101 00:16:58,640 --> 00:16:59,560 el font, 102 00:17:02,560 --> 00:17:04,000 pues la misma fuente, 103 00:17:08,000 --> 00:17:16,440 el tamaño, 30, no, vamos a poner un poco más pequeño que será 20, por ejemplo, le vamos a decir 104 00:17:18,560 --> 00:17:30,560 el testcolor, que en este caso, pues lo que decíamos antes, lo ponemos a white y ¿qué más le podemos decir? 105 00:17:30,560 --> 00:17:44,360 El width, 450, o sea, es el tamaño, 450. Siempre en relación con el tamaño de nuestra ventana principal que 106 00:17:44,360 --> 00:17:50,920 hemos creado en clase ventana principal, ¿vale? Siempre hacerlo en relación a eso, que luego no 107 00:17:50,920 --> 00:17:57,960 pasaría nada porque si no puedes todo el tamaño, pero sí que a la hora de mandar a la izquierda o 108 00:17:57,960 --> 00:18:04,880 a la derecha, ahí sí te puedes encontrar con que si no tienes bien medido, bien 109 00:18:04,880 --> 00:18:16,160 insertados los tamaños, los width, los height, te puede dar problemas, ¿vale? Ya tengo esto y ahora 110 00:18:16,160 --> 00:18:25,920 ¿qué le voy a poner? El self.lbljson1.grid, igual que antes, todo el rato igual. Ahora, ¿cuál es la 111 00:18:25,920 --> 00:18:32,320 diferencia? Que el row es igual a 1, ¿vale? En este caso no hay un column span porque quiero que me lo 112 00:18:32,520 --> 00:18:46,960 hagan esa columna, así que le voy a pasar el column 0 y le decimos, le vamos a pasar el stack, el sticky es 113 00:18:46,960 --> 00:19:02,000 igual al este, ¿vale? O sea, a la derecha, ¿vale? Y ya tendría mi primer label pidiendo, bueno, tengo 114 00:19:02,000 --> 00:19:11,440 el label del título, el label del fichero pidiendo ese json1, ¿vale? Esto me lo voy a 115 00:19:11,440 --> 00:19:17,920 grabar porque al final es lo mismo que antes y no tiene como mucho sentido. 116 00:19:17,920 --> 00:19:30,600 Así, ya está, me lo he copiado, ya está, ¿vale? ¿Qué voy a hacer ahora? Pues el entry donde voy a 117 00:19:33,120 --> 00:19:42,520 meter el nombre de ese fichero que quiero leer, ese fichero json, ¿vale? Entonces el punto, 118 00:19:42,680 --> 00:19:57,560 aquí lo voy a llamar txt json1, es igual a ctkEntry, 119 00:19:57,560 --> 00:20:11,640 ctkEntry, ¿vale? Como siempre, lo primero, ¿dónde lo vamos a dibujar? ¿Vale? Lo segundo, 120 00:20:11,640 --> 00:20:20,880 la fuente, cuando escribes la fuente que te aparece y vamos a poner otra vez la misma. Esto, 121 00:20:21,520 --> 00:20:28,520 fijaros que es súper monótono, que es todo el rato lo mismo, o sea, que si le das una vuelta seguro 122 00:20:28,520 --> 00:20:37,240 que puedes de alguna manera optimizar todo este texto que yo estoy poniendo. Lo estoy poniendo 123 00:20:37,240 --> 00:20:50,200 así porque es color white, no, hoy no, en este caso le vamos a poner... Yo lo escribo así para 124 00:20:50,200 --> 00:20:56,520 que vayáis viendo paso a paso, ¿vale? Pero seguro que el texto o todo esto lo podéis optimizar. En 125 00:20:56,520 --> 00:21:08,240 este caso, el texto lo vamos a poner del mismo... Colores, había un get, este, ¿vale? Un color de 126 00:21:08,240 --> 00:21:21,560 fuente, ¿vale? Vale, y le podemos pasar para que estén relacionados de alguna manera el placeholder. 127 00:21:24,360 --> 00:21:25,840 Bueno, el placeholder 128 00:21:29,120 --> 00:21:29,640 es... 129 00:21:29,640 --> 00:21:49,520 Vamos a ponerle el json1, ¿vale? Luego cuando lo mandemos a imprimir vais a ver cómo ese placeholder 130 00:21:50,880 --> 00:21:58,640 es el texto que aparece como ayuda dentro de esa caja de texto, ¿vale? Entonces, bueno, pues ya sabéis 131 00:21:58,640 --> 00:22:06,200 que aquí lo que sí es obligatorio es esto del frame, a lo mejor el ancho, si queréis meterle un 132 00:22:06,200 --> 00:22:15,040 ancho, una altura, ¿vale? Pero ya está, sobre todo lo del frame. Vale, tenemos esto, vamos a meterle un 133 00:22:15,040 --> 00:22:22,040 border color por hacerle más cosillas, el border color, en el border color le voy a pasar... 134 00:22:28,920 --> 00:22:44,320 Puedo pasar el mismo color, a lo mejor, set.color, colores.get, podemos pasar el mismo color que la 135 00:22:44,320 --> 00:22:52,400 fuente para que quede... Todo esto, como ya lo tenemos hecho, podemos hacerlo, lo ponemos ahora 136 00:22:52,400 --> 00:23:01,520 como queráis o como yo quiera y luego ya cuando lo vea, pues lo modifico, lo hago de una forma, 137 00:23:01,520 --> 00:23:12,000 lo hago de otra, ¿vale? Y ya está. Esto, self, colores, punto, get, color, cabecera, fuente, pues vamos a 138 00:23:12,000 --> 00:23:31,640 meterle el... El de la cabecera era un poco más fuerte, ¿no? Este, bokeh. Pues este mismo y ya estaría. Yo creo que con 139 00:23:31,640 --> 00:23:41,600 esto ya nos vale. Vamos a poner, como hemos puesto en todos, el width, pues en este caso 400 y yo creo 140 00:23:41,600 --> 00:23:59,640 que con esto ya me vale y me sobra. ¿Vale? ¿Qué me queda por poner? Self, punto, txt, json1, punto, width. ¿Dónde lo voy a poner? 141 00:23:59,640 --> 00:24:10,760 En el row1, igual que antes, ¿vale? Si os fijáis, es el row1. ¿Qué es lo que cambia? Que la columna ahora ya no es la 0, 142 00:24:10,760 --> 00:24:25,960 ahora es la 1, ¿vale? Entonces se lo paso. Columna1, row1 y le voy a pasar un pathX para que me lo ponga bien a 10 y un pathY a 10. 143 00:24:26,960 --> 00:24:46,880 Y vamos a situarlo, está aquí, igual, pues otra vez a la derecha. ¿Vale? Y ya tenemos nuestro... Nuestra segunda fila, ¿vale? Con sus dos 144 00:24:46,880 --> 00:24:52,960 columnas, que es lo que queríamos. Y continuamos y todo el rato haciendo lo mismo. ¿Qué voy a hacer 145 00:24:52,960 --> 00:25:13,960 ahora? El segundo json, pues nada, pues venga, ctrl-c, ctrl-v, ahí lo tenemos, en este caso es el fichero 2, le cambio, json2, json2... 146 00:25:13,960 --> 00:25:28,960 La fila no es la 1, ¿cuál sería? La 2, pues ya está. La 2, la columna así en la 0, fichero json... ¿Vale? Y todo esto, pues no cambia nada. 147 00:25:28,960 --> 00:25:38,960 Así que lo copiamos, lo pegamos y ya lo tenemos. ¿Qué hago ahora? Meter el entry, pues venga, copia y pega. 148 00:25:39,960 --> 00:25:49,960 Esto lo que os puede pasar en un momento dado, es que de copiar y pegar, pues que a lo mejor no cambiáis la fila, o la columna, entonces se os lo va a dibujar 149 00:25:49,960 --> 00:25:58,960 encima del otro que teníais anterior, o no cambiáis la etiqueta, entonces, ¿ves? Yo por aquí, sí, aquí sí se lo he cambiado. ¿Vale? Entonces va a actuar 150 00:25:58,960 --> 00:26:07,960 sobre la caja de texto, si queréis leer el texto que hay en esa caja de texto, vale, cosas así os pueden pasar. Entonces hay que tener cuidado también, ya lo 151 00:26:07,960 --> 00:26:19,960 sabéis cuando copiáis y pegáis, ¿vale? Y ir con el autoguardado, importante también, para que no se nos vaya borrando nada. Vale, ya tendríamos los dos... 152 00:26:19,960 --> 00:26:30,960 A ver, esto sería la row 2, esto ya se me ha olvidado a mí, ¿vale? Y en la columna 1 ya tendríamos los dos cajas de texto para meter el valor, el nombre 153 00:26:30,960 --> 00:26:52,960 de los ficheros que queremos leer, de los que queremos sacar, extraer la información. ¿Vale? Vale, ahora, tenemos los labels ctk, los txtjson, ¿vale? 154 00:26:52,960 --> 00:27:11,960 Vamos a meter ahora los dos botones, o un botón, había un botón y luego había un... Ah, luego había las dos cajas de texto para mostrar la información, eso era, ¿vale? 155 00:27:12,960 --> 00:27:39,960 Entonces, aquí vamos a meter ese botón, entonces vamos a meter btn, por ejemplo, cargar es igual a ctkbuton, paréntesis, donde lo queremos dibujar, como siempre, ¿vale? 156 00:27:39,960 --> 00:28:01,960 Como siempre, en el frame, el texto que quiero que aparezca en el botón, pues le vamos a poner, cargar ficheros, fuente, ¿vale? 157 00:28:01,960 --> 00:28:09,960 ¿Veis? Es que está todo el tiempo lo mismo, ¿vale? Cuando lo estáis dibujando así es un poco rollo. 158 00:28:09,960 --> 00:28:30,960 Dayouting, hemos ido poniendo todo a 20, pues a 20, el color del texto que va a ser ser .colores. 159 00:28:30,960 --> 00:28:48,960 Ah, no, es el botón, entonces el botón vamos a pasarlo directamente en white, yo creo que con esto va a quedar mejor. 160 00:28:48,960 --> 00:29:01,960 Y el command, ¿vale? El command, ¿a qué función llamamos cuando pulsemos, cuando generemos el evento un clic, cuando pulsemos en el botón? 161 00:29:01,960 --> 00:29:21,960 Lo vamos a llamar a una función, por ejemplo, cargar datos, ¿vale? Este botón, pues como hemos estado haciendo todo el rato, hay que situarlo btn.cargar.grid 162 00:29:21,960 --> 00:29:39,960 Hay que situarlo en el grid que hemos creado con el tkframe que hemos configurado aquí arriba, ¿vale? Entonces tienes el botón cargar, el .grid, el row. 163 00:29:39,960 --> 00:30:01,960 En este caso, ahora estamos en la fila 3, column spam, para que me lo centre directamente, el column spam 2, las dos columnas, y el padding. 164 00:30:01,960 --> 00:30:19,960 Vamos a meterle un padding de 10, como todo el tiempo, y ya tendríamos ese botón que va a controlar la carga de datos cuando lo pulsamos, ¿vale? 165 00:30:20,960 --> 00:30:43,960 Vale, tenemos la función self.cargarDatos, así que vamos a crearnos por aquí abajo una función def.cargarDatos.self.pass, ¿vale? 166 00:30:44,960 --> 00:31:03,960 Para que no me dé así ningún problema, ¿vale? Ya tendríamos bastante hecho, ¿vale? ¿Qué me falta? ¿Qué voy a hacer ahora? Pues empezar a dibujar esos datos que he estado leyendo de esos dos ficheros. 167 00:31:04,960 --> 00:31:17,960 Para eso me hacen falta dos textboxes, dos cajas de texto para poder escribir los datos del fichero datos.json y de notas.json, ¿vale? Pues venga, vamos a ello. 168 00:31:18,960 --> 00:31:41,960 El primero lo voy a poner, pues por ejemplo, vamos a poner self.txtDatos1 es igual a ctk, esto es un textbox, ¿vale? Como siempre, ¿dónde quiero dibujarlo? 169 00:31:41,960 --> 00:31:55,960 Frame, tamaño, ancho, ¿qué le vamos a decir? Pues por ejemplo, 220, altura, a ver, un momentito, que me llaman. 170 00:32:11,960 --> 00:32:37,960 Vale, perdón, altura, ¿qué le podemos decir? Pues para mostrar mejor todos los datos de esos ficheros, con 100, luego también van a salir los tiradores, los sliders para desplazarnos por el texto, ¿vale? 171 00:32:37,960 --> 00:32:54,960 Entonces, la fuente, utilizamos la de siempre, ¿vale? Que esto, si en la ventana principal la hubiera puesto con esa fuente, desde el principio no me haría falta estar cargando todas esas fuentes todo el tiempo, ¿vale? 172 00:32:54,960 --> 00:33:23,960 Pero bueno, voy a ir haciendo paso a paso, ¿vale? El tamaño, en este caso lo voy a pasar, pues 11, descolor, pues white, border color, white, el border, en este caso, 173 00:33:23,960 --> 00:33:45,960 si le paso el border width, para que me dibuje ese border color, si no, no lo va a dibujar, ¿vale? El fgColor, que le vamos a poner el del fgColors.colores.get, 174 00:33:45,960 --> 00:34:03,960 el de, me parece que habíamos metido el de las cabeceras, yo creo que hemos metido antes este, así parece como si solo fuera el marco, ¿vale? Y tuviera transparencia, ¿vale? Y ya estaría. 175 00:34:03,960 --> 00:34:32,960 Vale, ¿qué hago ahora? Pues self adivinar, txtDatos1.grid, ¿vale? ¿Dónde quiero dibujar esto? En la column 0 de la fila, aquí estamos en la 3, pues de la fila 4, con un padding de 10, ¿vale? 176 00:34:32,960 --> 00:34:56,960 Y ya tendríamos nuestra primera caja de texto, vamos con la segunda, pues nada, si es lo mismo, así que cojo esto, control-c, vámonos para acá, control-cmd-v, vale, he cogido el de antes, 177 00:34:56,960 --> 00:35:25,960 esto no es lo que quiero, lo que yo quiero es esto, ¿vale? Listo, ¿qué le pongo aquí? El 2, lo dibujamos en frame, en border, aquí es la columna 1, ¿vale? 178 00:35:26,960 --> 00:35:47,960 Y ya está, y no hay mucho más, no hay mucho más cambios, ya estaría, vale, ya tendríamos esos dos espacios donde voy a dibujar, donde voy a escribir la información de los JSON, ¿vale? 179 00:35:48,960 --> 00:36:14,960 Pues seguimos, ¿qué más nos haría falta ahora? Ya hemos leído los JSON, pues ya lo que nos falta es guardarlo, hacer esa combinación entre la información de los dos JSON para guardarlo a nuestra base de datos de MySQL, 180 00:36:14,960 --> 00:36:30,960 entonces, ¿qué me hace falta? Pues vamos a ponerle otra etiqueta y luego le vamos a poner otro botón, y ya tendría como mínimo hecha mi ventana en la que yo voy a poder visualizar esos datos, ¿vale? 181 00:36:30,960 --> 00:36:54,960 Entonces, venga, vamos a ello, vamos a coger, le voy a poner un, pues no sé, vamos a llamarles lblTítulo2, por ejemplo, como vosotros queráis, el ctkLabel, porque es una etiqueta, ¿vale? 182 00:36:55,960 --> 00:37:18,960 Lo dibujo en frame, le pongo la variable text, le paso salvando, datos, vale, la fuente, que es, tamaño de la fuente, vamos a ponerle 30, 183 00:37:18,960 --> 00:37:45,960 vamos a pasarle el textColor, que va a ser white, vamos a ponerle un width, que es igual a 450, o sea, exactamente igual que en la etiqueta, en el label, en el título que he metido arriba del todo, ¿vale? 184 00:37:46,960 --> 00:38:04,960 ¿Qué le metemos ahora? Pues el lblTítulo2.gris, vale, y pues aquí le vamos a decir también que nos lo centre con el column span igual 2, le vamos a decir la fila donde quiero que me lo dibuje, 185 00:38:04,960 --> 00:38:19,960 que es la 5 y un padding, un padding igual a 10, listo, ¿vale? 186 00:38:20,960 --> 00:38:45,960 ¿Y qué nos faltaría ahora? El botón, el botón para salvar, para guardar esos datos cuando lo pulsamos, ¿vale? Entonces, pues venga, vamos a por el botón, btnSalvar, es igual a ctkButton, 187 00:38:45,960 --> 00:39:04,960 lo dibujamos en frame, el texto que le vamos a poner va a ser igual a salvarDatos, la verdad es que esto, no sé si me gusta mucho el texto este, pero bueno, no pasa nada. 188 00:39:16,960 --> 00:39:24,960 A un tamaño, pues vamos a poner de 20, 20 puede ser mejor mucho, no lo sé, ¿vale? 189 00:39:24,960 --> 00:39:41,960 TestColor, en el TestColor, pues como todo el rato, White, ¿vale? Esto es como queréis vosotros darle ese diseño a esa interfaz, el command, ¿vale? 190 00:39:41,960 --> 00:39:55,960 Capturamos el evento en click, aquí vamos a llamar a una función que va a ser, pues guardarBaseDeDatos, como vosotros queráis, ¿vale? 191 00:39:55,960 --> 00:40:24,960 btnSalvar.grid, esto en la row, 6, columnSpan para que nos lo centre, columnSpan, esto es igual a 2, nuestras dos columnas, y el path, 192 00:40:24,960 --> 00:40:47,960 y que lo voy a poner a 10, ¿vale? Bueno, con esto vamos a crearnos, igual que he hecho antes, vamos a crearnos un def que sea guardarBaseDeDatos, ¿vale? 193 00:40:48,960 --> 00:41:05,960 Bueno, ya tengo dibujado aquí toda la que sería mi interfaz cuando pulso sobre el botón de cargar datos. 194 00:41:05,960 --> 00:41:19,960 Vale, entonces, esto ya lo tengo guardado, aquí me voy a venir a mi clase de ventana principal, y en loadJson, lo que vamos a decirle es, primero, que limpie, 195 00:41:19,960 --> 00:41:30,960 que yo creo que ya lo teníamos, ¿no? Limpiar, bueno, según lo escribo lo voy a ver, primero, recordar que el botón que teníamos en la ventana principal, 196 00:41:30,960 --> 00:41:42,960 llamaba a la función loadJson, y ese le tenía puesto con él el path, ¿vale? Porque no teníamos creado todavía el loadJson.py, vale, ahora ya lo tengo, 197 00:41:42,960 --> 00:41:55,960 entonces, lo primero que quiero es el self.limpiar, no está, genial, pues nos hace falta una función que sea limpiar ventana, ¿vale? 198 00:41:55,960 --> 00:42:09,960 Entonces, aquí voy a volver a dejar el path, limpiar, porque en el frame tenemos que limpiarlo, porque si no va a escribir información encima de información, 199 00:42:09,960 --> 00:42:19,960 y eso no vais a obtener el resultado que estáis buscando, ¿vale? Entonces, lo primero que hago es limpiarlo, entonces, yo me creo una función siempre que es limpiar 200 00:42:19,960 --> 00:42:38,960 ventana, ventana principal, ¿vale? El main que hemos creado como principal, este es el self, y a esto le voy a pasar el frame principal, ¿vale? 201 00:42:38,960 --> 00:42:48,960 Esta, en el frame principal, es cual de esos frame que hemos creado sobre la ventana principal, es la que quiero limpiar de widget, ¿vale? Dejarla en blanco, 202 00:42:48,960 --> 00:43:12,960 entonces, aquí le voy a decir que me coges el self, aquí lo que hago primero es un for, le digo, léeme todos los widgets que hay dentro de esa ventana principal, ¿vale? 203 00:43:12,960 --> 00:43:34,960 Los vas cargando, uno a uno me los vas cargando en widget, y lo que hago es ir destruyéndolo, entonces, esto lo que hago es sube doble info, vale, dos puntos, entonces, vale, le digo esto, 204 00:43:35,960 --> 00:43:59,960 me vas cogiendo todos los widgets que están cargados en el frame principal, ¿vale? Eso los vamos enumerando en la variable widget, entonces, lo que puedo hacer es widget destroy, vale, y los destruimos, vamos, los borramos, vale, 205 00:43:59,960 --> 00:44:18,960 ahora aquí ya si, lo primero que hago es llamar a self.limpiar ventana principal, y le digo cual es el frame que quiero borrar, que es self.main, 206 00:44:18,960 --> 00:44:47,960 vamos a verlo, ventana principal, ventana principal, las cajas, pie, pie, izquierda, izquierda, principal, self principal, vale, pues self principal, 207 00:44:48,960 --> 00:45:07,960 ahí lo tienes, vale, esto ya nos lo va a eliminar cuando pulsamos sobre el botón, vamos a probarlo, arrancamos, aquí tenemos este, entonces, cuando yo doy a migrar datos, me lo está limpiando, 208 00:45:07,960 --> 00:45:21,960 o sea, bien, vale, ese primer paso está bien, ahora, lo que también quiero es que me lleves a esta clase que estamos creando, esta clase que le hemos llamado loadJson, 209 00:45:22,960 --> 00:45:40,960 lo primero que tengo que hacer es importar esa clase, vale, entonces, pues vamos a ello, a importar la clase, que es, pues, from, loadJson, import, mi base de datos, ¿no?, 210 00:45:40,960 --> 00:46:01,960 ¿cómo le llamo yo a la clase?, loadJson, vale, loadJson, vale, ya lo tengo aquí, pues aquí lo que hago es llamar a la clase que nos estamos haciendo para cargar esos datos, 211 00:46:02,960 --> 00:46:24,960 vale, entonces, y a ese loadJson, hay que acordarse que le pasamos un fichero, vale, entonces, cuidado con un fichero, perdón, le pasamos la ventana, el frame, 212 00:46:24,960 --> 00:46:42,960 donde queremos que se dibuje, entonces, aquí habrá que pasarle el self.principal, vale, recordar, en el loadJson, en el loadJson, le pasamos ese frame donde queremos dibujar, 213 00:46:42,960 --> 00:47:01,960 que es luego donde hacemos otro frame, en el que ya hemos configurado las filas, las columnas, todo el rollo, vale, entonces, estamos con esto, vale, en principio vamos a ver que nos hace, 214 00:47:02,960 --> 00:47:22,960 bueno, recordar también, yo aquí no tengo creada, creamos la base de datos y tal, pero en este ordenador donde grabo estos vídeos no tengo el, os lo diré, no tengo la base de datos, 215 00:47:22,960 --> 00:47:36,960 no tengo el, no uso el docker, vale, entonces, solo os pongo el código que os va a funcionar, lo probáis, vale, y si no cualquier cosa me lo decís, en el loadJson, tal, no se que, vale, 216 00:47:36,960 --> 00:47:58,960 nos vamos a nuestro principal, lo ejecutamos, tenemos nuestra ventana, yo cuando le doy a cargar los datos, veis, ya nos sale, esto creo que os lo pedía así, vale, entonces, tenemos una fila, dos filas, tres filas, cuatro, cinco, seis, siete, vale, 217 00:47:58,960 --> 00:48:25,960 que es lo que habíamos dicho, tenemos dos columnas, sé que tengo dos columnas porque en la misma fila veis que puedo meter, pues eso, un campo de texto, un campo de texto, un label, un campo de texto, vale, una caja de texto, un campo de texto, un text o un textbox, vale, el column span aquí cuando los he usado ves que ya automáticamente me está centrando los objetos, 218 00:48:25,960 --> 00:48:53,960 y esto es lo que veníamos buscando, vale, aquí escribiría el nombre de los Json y cuando le doy a cargar fichero, aquí ahora no me hace nada porque no lo hemos terminado, vale, pero ya por lo menos la interfaz la tenemos, que no es poco, vale, y nuestra interfaz con este que ya lo hicimos en otro vídeo, vale, pues seguimos con loadJson, 219 00:48:53,960 --> 00:49:22,960 nuestra interfaz en el INI ya lo tenemos, yo en el INI tampoco soy muy amigo de hacer todo esto, vale, esto lo haría en una función aparte, yo lo único que haría aquí es cargar las variables, los valores en las variables, es un constructor, entonces, a mí hacer esto aquí, bueno, yo lo hago porque os lo voy explicando, pero es una barbaridad un poco, vale, bueno, tenemos las funciones de cargar datos y de guardar envase de datos, 220 00:49:22,960 --> 00:49:47,960 pues vamos con cargar datos, vale, entonces, cargar datos, vamos a poner, vale, lo primero que le voy a decir es voy a trabajar con el sistema operativo para que me busque esos ficheros que quiero cargar, entonces, por ejemplo, vamos a meter datosPath, 221 00:49:47,960 --> 00:50:12,960 este es igual a os.path, que para eso lo hemos cargado, vale, para que nos abra la típica ventana, dearName, la típica ventana para buscar el navegador de archivos del sistema, vale, vale, y, pues para ver si nos lo hace bien, vamos a poner un print, 222 00:50:12,960 --> 00:50:39,960 y le vamos a decir que nos dé la ruta de ese archivo, de ese JSON, en este caso, que quiero cargar, vale, y ahora ya le paso el width, open, con el fichero que hemos abierto, le tenéis que ir haciendo, dibujando la ruta, vale, 223 00:50:42,960 --> 00:51:09,960 excel.txtJSON, el nombre del fichero que hemos escrito nosotros, vale, aquí lo que estoy es escribiendo esa ruta, vale, y este tipo de variables, acordaros que para coger el valor que hemos escrito en las cajas de texto, es con el get, acordaros de eso, vale, 224 00:51:09,960 --> 00:51:30,960 as, datos1, vale, pues ya está, me lees todo lo que hay en ese fichero, como datos1, tengo toda la información guardada en datos1, vale, entonces, lo que hago es, 225 00:51:40,960 --> 00:52:07,960 aquí va a ser igual a json.load, datos1, esto es, vale, entonces, lo primero que hago es, coger ese fichero y lo meto en datos1, y luego, como es un JSON, lo voy a cargar en la variable misDatos, como datos con el json.load, vale, 226 00:52:07,960 --> 00:52:25,960 acordaros de como trabajábamos con los JSON, entonces, que para leer JSON, usamos el load, siempre, vale, para leer los ficheros que hay en un JSON, usamos el load, vale, vale, 227 00:52:25,960 --> 00:52:53,960 vale, que más voy a hacer ahora, leer el segundo fichero, porque son dos, ahí, vamos a ver, este aquí, vale, en este caso, pues dos, dos, aquí vamos a ponerle, 228 00:52:53,960 --> 00:53:15,960 dos, misDatos, vamos a ponerle aquí un dos, para que sean las variables diferentes, y ya estaría, vale, ya tengo cargados en las variables, misDatos-text y misDatos2-text, 229 00:53:15,960 --> 00:53:43,960 tengo cargados esos datos de esos dos ficheros JSON, vale, listo, vale, que hago ahora, podemos ir escribiendo en las dos textbox, ctcap textbox, que hemos creado antes, 230 00:53:43,960 --> 00:54:10,960 en la interfaz, escribir estos datos, pues venga, entonces, aquí le voy a poner, for, como siempre, for e-inself.misDatos-text, vale, y le voy a pedir por, como son JSON, 231 00:54:10,960 --> 00:54:27,960 que es lo que le vas a decir, le paso la clave por la que quiero ir leyendo, o sea, fijaros como era este, en este caso es datos, tienes usuario, la colección de datos, y recordar que como es un JSON, 232 00:54:27,960 --> 00:54:52,960 tenemos clave, valor, clave, valor, clave, valor, vale, entonces, yo lo primero que le digo, es, de esos ficheros JSON que hemos cargado en una variable de Python, me vas a traer, o vamos a leer, los de la colección usuario, vale, 233 00:54:52,960 --> 00:55:18,960 con un for each, vale, entonces aquí yo tengo línea, es igual, una variable que yo le llamo línea, entonces le digo que campos quiero que me escribas, pues el username, vale, el username, el email, el password, vale, y me va a ir escribiendo todos los datos, 234 00:55:18,960 --> 00:55:47,960 esto lo tenemos en loadJSON, entonces le digo, quiero el username, vale, más, vamos a pasar, vale, vamos a ver, para esto un momento, pausa, vale, entonces vamos a ir creando, ese string que vamos a ir dibujando en los textbox, 235 00:55:49,960 --> 00:55:55,960 email, 236 00:55:55,960 --> 00:56:19,960 email, vale, bueno, pues en principio le podemos pasar aquí el password, 237 00:56:25,960 --> 00:56:48,960 y salto de carro, vale, y esto me dibuja la línea, y ahora lo que le digo es que el cell en txt datos1.insert, me vas a insertar esa línea, 238 00:56:49,960 --> 00:57:10,960 y ya está, insert, siempre debajo, y línea, vale, me vas a insertar esa línea, el insert es justo a continuación, vale, pues justo a continuación como tiene un salto de carro lo va a poner justo debajo, vale, podemos decirle que no el inserte al final, 239 00:57:11,960 --> 00:57:37,960 al principio, hoy hay diferentes parámetros para jugar con este insert, vale, pues con eso lo que escribo es ese primer JSON que le hemos dicho a nuestra aplicación, vale, y ahora pues hacemos lo mismo con el segundo, 240 00:57:37,960 --> 00:58:02,960 copio, pego, este product, este product, aquí va a ser mis datos2, aquí si nos fijamos en las notas, pues será un campo, supongo que serán notas, notas y notas, notas, nombres, módulos y dentro de los módulos esto, vale, 241 00:58:02,960 --> 00:58:25,960 entonces ese es un poco más complejo porque es colecciones y luego dentro hay otra colección, un poquitillo más complejo pero vamos que tampoco tiene nada, vale, entonces le vamos a meter ahí el datos2, aquí notas, notas, vale, entonces aquí le vamos a decir, 242 00:58:33,960 --> 00:58:59,960 vamos a decirle línea1, va a ser igual a, me quedo sin batería, un momentito, vale, línea1, entonces le decimos aquí quiero que me pongas el username, el nombre, 243 00:59:00,960 --> 00:59:16,960 esto era por, a ver, enséñamelo otra vez, notas, es notas, que ya lo hemos pasado, luego tengo el nombre y los módulos, vale, tengo el nombre del módulo, nota1 y nota2, vale, entonces lo vamos a poner aquí como, 244 00:59:16,960 --> 00:59:45,960 nombre, más, vamos a poner dos puntos, más, vale, vale, que aparezca el nombre, vale, esto lo voy a insertar en el, 245 00:59:46,960 --> 01:00:15,960 en el fichero2, o sea, set.txt, .insert, igual que antes insert, le vamos a pasar, línea1, que es donde estamos, 246 01:00:16,960 --> 01:00:34,960 vale, en este caso lo único que estoy haciendo es, me vais sacando estos nombres, vale, Juan Pablo, Luis Miguel, Sofía, Lucas, Aarón, vale, vale, ahora tenemos otra colección, una colección dentro de otra, 247 01:00:34,960 --> 01:00:54,960 entonces que me va a hacer falta, pues meter otro, for, j, vale, in, in, en este caso como le he llamado a esa colección, módulos, pues venga, módulos, vale, exactamente igual, 248 01:00:54,960 --> 01:01:19,960 es todo el rato haciendo lo mismo, vale, pues ahí ahora en línea2, le puedo decir, por ejemplo, línea2, como vosotros queráis, esto va a ser igual a j, y aquí le voy a decir, 249 01:01:19,960 --> 01:01:48,960 nombre módulo, más, este por aquí, más, j, nota1 ahora, nota1, más, vale, 250 01:01:49,960 --> 01:02:10,960 más, aquí le paso str, le voy a convertir a string, porque notas j son, tenemos valores integer, vale, entonces le vamos a pasar a convertir a string ese valor, entonces esto es j, 251 01:02:20,960 --> 01:02:43,960 no, esto, esto es str, y aquí también, claro, porque nota1 también es un valor numérico, entonces exactamente por lo mismo, aquí nota2, nota2, vale, y más, vamos a meterle, 252 01:02:44,960 --> 01:03:06,960 el salto del carro, el salto del carro, vale, y que me quedaría insertar esa línea en el texto, entonces el punto txt, datos2, punto insert, igual que aquí arriba, vale, insert, 253 01:03:06,960 --> 01:03:24,960 le pasamos el insert, y le pasamos línea2, uy, línea2, vale, bueno, yo creo que con esto ya me tendría que dibujar todo, vamos a verlo, vamos a coger, vamos a venirnos al principal, 254 01:03:25,960 --> 01:03:41,960 vamos a venirnos aquí, vale, le doy migración de datos, esto ya habíamos visto que nos lo hacía bien, vale, cargar ficheros, no encuentra nada porque no hay ningún fichero ahora mismo, 255 01:03:41,960 --> 01:04:03,960 entonces vamos a decirle, por un lado aquí es datos.json, y aquí era notas.json, cargar ficheros, y ya tenemos nuestro fichero, vale, con el tirador que os estaba diciendo, vale, 256 01:04:04,960 --> 01:04:23,960 y ya el último paso que me faltaría sería cargar esta información en la base de datos, y ya lo tenéis hecho todo aquí y aquí, vale, o sea, ya tengo hecho todo, leído, sacado, extraído la información de los json, 257 01:04:23,960 --> 01:04:39,960 y los tengo en estos dos widgets, que ya me va a facilitar en cierto modo el trabajo, vale, ya tienes Lucas, ya tienes Sofía, ya tienes los nombres, podríamos ya directamente ir uno a uno, ir poniéndolos, vale, 258 01:04:39,960 --> 01:04:57,960 vale, entonces me faltaría el hacer este botón, y este es fácil, este informe de estas notas.json, vale, aquí lo que le voy a decir es primero vamos a importar esa base que ya la teníamos, vale, entonces, 259 01:04:58,960 --> 01:05:21,960 que le voy a decir, pues, mi base de datos es igual a mi btd, como puse yo esto, self, punto, así es que esto, lo único que tengo que hacer es mis datos, 260 01:05:21,960 --> 01:05:41,960 a recordar que esto ya lo tengo, ya lo he ido escribiendo aquí, entonces, con que le pase mis datos, text, y self, punto, mis datos, dos, guión, bajo, text, 261 01:05:42,960 --> 01:05:58,960 con esto nos va a funcionar, aquí, self, se me había olvidado, la base de datos, que es la que os digo que no tengo el docker, vale, recibe esos datos uno y datos dos, ya los tienes aquí, vale, 262 01:05:58,960 --> 01:06:18,960 hacemos la conexión, creamos la diferente base de datos, y en guardar datos, guardar datos no lo tengo creado aquí, entonces vamos con él, aquí lo único que hicimos fue crear las tablas, la base de datos, 263 01:06:19,960 --> 01:06:36,960 pero no guardé los datos, pues vamos a ver como guardaríamos esos datos en esa función, entonces, aquí vamos a quitar este pass y sería, por ejemplo, para usar esa línea donde voy a construir esos datos, 264 01:06:36,960 --> 01:06:53,960 vale, y luego ya son dos ficheros de datos, son dos ficheros, dos colecciones de datos, entonces, pues un for, para recorrerlo todo, vale, for, j, in, self, datos uno, por ejemplo, 265 01:06:53,960 --> 01:07:11,960 y datos uno, sigue siendo un j, entonces, le tienes que decir la colección sobre la que quieres trabajar, entonces, usuario, igual que hemos visto antes, y voy creándome, igual que antes, 266 01:07:11,960 --> 01:07:21,960 esa línea que luego es la que le voy a pasar a través del cursor execute, ese comando, vale, a la base de datos es la que voy a guardar, entonces, ¿qué le voy a poner en la línea? 267 01:07:21,960 --> 01:07:45,960 Pues, en este caso, va a ser el insert, dentro de datos migrados dos, lo escribiría esto, datos migrados crear, examen datos, aquí está, datos migrados dos, vale, acordaros de eso, 268 01:07:45,960 --> 01:08:03,960 valores, y vamos a ir construyendo esa sentencia, aquí suele haber, siempre os suele dar jaleo, vale, pero es por hacer el string, yo lo que os diría es que hicierais un printlínea, 269 01:08:03,960 --> 01:08:19,960 porque luego siempre se nos olvida alguna coma, alguna comilla, algún paréntesis, yo que sé, cosas de ese tipo, vale, vamos, aparte de eso, poca cosa más, el username, 270 01:08:20,960 --> 01:08:39,960 más, seguimos construyendo nuestra cadena, jugar con la comilla simple y las doble comillas, pues ya sabéis que a veces tenemos que hacer eso, vale, cuando queremos construir 271 01:08:39,960 --> 01:09:03,960 esa sentencia, que vamos a mandar al JSQL, aquí le vamos a poner, el username, el email, le vamos a poner otra vez, el más, ese sería otro campo, coma, vale, otro más, 272 01:09:03,960 --> 01:09:28,960 que sería el password, vale, y ese serían los datos que tenemos en datos1, vale, esa colección de datos que le hemos pasado en datos1, vale, 273 01:09:28,960 --> 01:09:48,960 desde el load.json, save my data.txt, recordar, save my data.txt, es ese json que he ido cargando, vale, vale, ya tengo hecho esto, pues ahora le voy a hacer otro for, porque tengo el segundo fichero, 274 01:09:49,960 --> 01:10:10,960 y también hay que leerlo, vale, incel.datos2, y aquí ya si tenéis también varias formas de trabajar, en este caso le voy a decir que quiero notas, quiero leer, quiero trabajar sobre la colección de notas, 275 01:10:10,960 --> 01:10:39,960 y preguntar si znombre, vale, voy leyendo, es igual a jusername, vale, entonces que es lo que quiero que me haga, 276 01:10:40,960 --> 01:11:01,960 entonces me hace esa línea que le voy a pasar a mysql, pues ya está, como he hecho antes, for in z, la colección sería módulos, vale, o sea, ha encontrado los mismos nombres, 277 01:11:01,960 --> 01:11:16,960 el username y el nombre de la segunda colección, vale, acordaros que eran las notas, pues si encuentra concordancia, lo que vamos a leer es esa nota1, esa nota2 y el nombre del módulo, vale, 278 01:11:17,960 --> 01:11:27,960 entonces le estoy diciendo, me lees de esa segunda colección de datos que te he mandado, de ese segundo json que te he mandado, de la colección de módulos, 279 01:11:27,960 --> 01:11:48,960 me vas a hacer que la línea sea igual a lo que habíamos escrito antes, más, voy a dibujar, paréntesis, aquí más, y el nombre del módulo, 280 01:11:48,960 --> 01:12:17,960 módulo, nombre, módulo, más, vale, más, nota1, que es como es numérico, también lo tengo que pasar a string, str, str, tr, 281 01:12:18,960 --> 01:12:46,960 paréntesis, más, aquí, aquí, vale, más, lo mismo, str, y nota2, nota2, vale, con lo que esto termino, paréntesis, vale, str, 282 01:12:46,960 --> 01:13:03,960 más el salto de carro, vale, no, el salto de carro no, aquí no hay salto de carro, aquí lo que sería es, estamos haciendo la sentencia del SQL, entonces, 283 01:13:03,960 --> 01:13:16,960 termino los valores, vale, es un insert into, entonces estos serían los valores, ya lo tendríamos, esto no está muy bien, porque habría que cerrar esas comillas, 284 01:13:16,960 --> 01:13:29,960 lo que decía antes, vale, estas comillas de aquí habría que cerrarlas, pues a mí aquí ya me había colado, vale, pero vale, ya estaría, para ver que todo está bien, 285 01:13:29,960 --> 01:13:43,960 un poco lo que os decía antes, vale, yo lo que os aconsejaría es, hacer un print de esta línea que acabamos de crear, para ver que esa sentencia de SQL está bien escrita, 286 01:13:43,960 --> 01:13:55,960 vale, una vez que ya me cerció lo de que está bien, entonces, que voy a hacer, pues cursor, acordaros que cursor era la variable que creábamos cuando hacíamos la conexión 287 01:13:55,960 --> 01:14:12,960 con la base de datos, le metía el execute, con el execute le digo, primero que uses la base de datos que hemos creado, examenDAM, punto y coma, vale, 288 01:14:12,960 --> 01:14:29,960 esa sería la primera sentencia, la segunda, ser.cursor.execute, ahora, lo que le voy a pasar es línea, esta línea que acabamos de crear con esa sentencia del insert into, vale, 289 01:14:29,960 --> 01:14:51,960 ya está, línea, y por último, como es un cambio que estamos haciendo en la base de datos, hay que pasarle siempre, esto no es así, esto es conexión, conexión, punto y el commit, 290 01:14:51,960 --> 01:15:07,960 que no se os olvide el commit, vale, cada vez que hacemos un cambio en la base de datos, siempre para actualizarla, el commit, y línea es igual a la limpia, vale, 291 01:15:08,960 --> 01:15:29,960 y por último, que más le voy a hacer a esto, pues, self.cursor.close, vale, recordar esto siempre, cerrarlo, que es una buena práctica, self.conexión, cierro la conexión con la base de datos, 292 01:15:30,960 --> 01:15:42,960 cada vez que llame a esta clase me la va a abrir, entonces, pues, no la dejo abierta, vale, que me puede dar problemas, esto sería la función para guardar los datos, en la que hemos recibido las dos colecciones de datos, 293 01:15:43,960 --> 01:15:59,960 con dos for, hemos ido uniendo los diferentes campos de esos datos que no eran más que ficheros, la carga de esos ficheros, el load de esos ficheros json, y ya estaría el examen hecho, 294 01:15:59,960 --> 01:16:09,960 bueno, cualquier cosa, si no sale o no entendéis, me lo decís, un saludo, chao, hasta luego.