Bienvenido a FIME.me | La Comunidad Oficial de Alumnos de FIME
  • Login:
Resultados 1 al 6 de 6
  1. #1
    Junior Member
    Fecha de Ingreso
    Dec 2012
    Mensajes
    0
    Fime Pesos
    16,210
    Chido!
    282
    Tiene 57 Chidos! en 29 Posts
    No mames!
    34
    Tiene 6 No mames! en 3 Posts
    Descargas
    14
    Uploads
    95

    Tutorial Python y MySQL

    PRIMERA PARTE

    En este tutorial les mostrare lo increiblemente fácil y rápido que es crear un pequeño sistema para agregar, eliminar y acutialiazar registros en una base de datos.

    El sistema es sencillo, tenemos una arquitectura cliente-servidor, en la que interactuan dos aplicaciones, una es mysqld y otra es la ventanita de Python que vamos a hacer nosotros.

    Lo que vamos a necesitar para esto es todo esto:

    • Python (en MacOSX y Ubuntu ya viene instalado)
    • MySQL (en Ubuntu sudo apt-get install mysql; en MacOSX sudo port install mysql5-server)
    • El conector de Python a MySQL ( en Ubuntu sudo apt-get install python-mysqldb; en MacOSX sudo port install py26-mysql )
    • Un editor de textos con resaltador de sintaxis para Python y SQL (Notepad++ pa Windows, gedit pa Ubuntu y Smultron para MacOSX)


    Primero crearemos una pequeña base de datos de una escuela, para esto comenzamos haciendo el modelo de la base de datos, para eso hay que hacer un diagrama de entidad-relación en una hoja o si no en gliffy.com como le hice yo:



    ENTIDADES
    maestros
    alumnos
    materias
    cursos

    RELACIONES
    cursoalumnos

    Ahora inventamos unos registros para encontrarle sentido:
    Codigo:
    maestros
    maestro_id	maestro_nombre	maestro_sueldo
    001		Jose		60000
    002		Jessica		2000
    003		Elba		10000
    
    alumnos
    alumno_id	alumno_nombre	alumno_adeudo
    1200001		TaggerBear	1200
    1200002		Soft		3620
    1200003		Vomito		1800
    
    materias
    materia_id	materia_nombre		materia_semestre
    ELEC		Electromagnetismo	3
    COM1		Computación I		1
    OYC		Ondas y Calor		3
    
    cursos
    curso_id	materia_id	maestro_id	curso_hora	curso_salon
    aaaa		ELEC		001		16:10		3201
    bbbb		ELEC		001		17:00		3201
    cccc		ELEC		002		16:10		3202
    dddd		OYC		003		17:00		3401
    eeee		COM1		002		17:50		3401
    
    
    cursoalumnos
    curso_id	alumno_id
    aaaa		1200001
    bbbb		1200003
    cccc		1200002
    eeee		1200003
    dddd		1200001
    dddd		1200002
    eeee		1200001
    eeee		1200002
    Ya teniendo el modelo hay que crear la base de datos, para esto tenemos que arrancar el servidor MySQL(mysqld), para eso abrimos el cmd o el shell y corremos el ejecutable, luego para crear bases de datos hay que usar el shell de MySQL(mysql), para eso solo abrimos otro cmd o terminal y lo corremos.

    Codigo:
    sudo mysqld
    
    mysql -u root -p ''
    create database escuela;
    use database escuela;
    Copien todo esto y peguenlo:
    Codigo:
    create table maestros ( maestro_id INT, maestro_nombre VARCHAR(50), maestro_sueldo INT, primary key (maestro_id) ) ENGINE = InnoDB;
    
    create table alumnos ( alumno_id INT, alumno_nombre VARCHAR(50), alumno_adeudo INT, primary key(alumno_id) ) ENGINE = InnoDB;
    
    create table materias ( materia_id VARCHAR(4), materia_nombre VARCHAR(50), materia_semestre INT, primary key(materia_id) ) ENGINE = InnoDB;
    
    create table cursos ( curso_id VARCHAR(4), materia_id VARCHAR(4), maestro_id INT, curso_hora VARCHAR(5), curso_salon INT, primary key (curso_id) ) ENGINE = InnoDB;
    
    create table cursoalumnos ( curso_id VARCHAR(4), alumno_id INT ) ENGINE = InnoDB;
    
    create index indmat on cursos (materia_id);
    
    create index indmae on cursos (maestro_id);
    
    create index indcur on cursoalumnos (curso_id);
    
    create index indalu on cursoalumnos (alumno_id);
    
    alter table cursos add constraint indmat foreign key (materia_id) references materias (materia_id) on delete cascade on update cascade;
    
    alter table cursos add constraint indmae foreign key (maestro_id) references maestros (maestro_id) on delete cascade on update cascade;
    
    alter table cursoalumnos add constraint indcur foreign key (curso_id) references cursos(curso_id) on delete cascade on update cascade;
    
    alter table cursoalumnos add constraint indalu foreign key (alumno_id) references alumnos(alumno_id) on delete cascade on update cascade;
    
    insert into maestros ( maestro_id, maestro_nombre, maestro_sueldo ) values(001,"Jose",60000),(002,"Jessica",2000),(003,"Elba",10000);
    
    insert into alumnos ( alumno_id, alumno_nombre, alumno_adeudo ) values (1200001,"TaggerBear",1200),(1200002,"Soft",3620),(1200003,"Vomito",1800);
    
    insert into materias ( materia_id, materia_nombre, materia_semestre ) values ("ELEC","Electromagnetismo",3),("COM1","Computación I",1),("OYC","Ondas y Calor",3);
    
    insert into cursos ( curso_id, materia_id, maestro_id, curso_hora, curso_salon ) values ("aaaa","ELEC",001,"16:10",3201),("bbbb","ELEC",001,"17:00",3201),("cccc","ELEC",002,"16:10",3202),("dddd","OYC",003,"17:00",3401),("eeee","COM1",002,"17:50",3401);
    
    insert into cursoalumnos ( curso_id, alumno_id ) values ("aaaa",1200001),("bbbb",1200003),("cccc",1200002),("eeee",1200003),("dddd",1200001),("dddd",1200002),("eeee",1200001),("eeee",1200002);
    Ya esta lista la base de datos, con tablas y registros, ahora vamos a hacer unas consultas para ver que tal quedo:
    Toda los datos de todos los maestros
    Codigo:
    SELECT * FROM maestros;
    Los nombres de todos los maestros ordenados alfabeticamente
    Codigo:
    SELECT maestro_nombre FROM maestros ORDER BY maestro_nombre;
    Cuanto gana la maestra Jessica
    Codigo:
    SELECT maestro_sueldo FROM maestros WHERE maestro_nombre = "Jessica";
    Que maestros dan clase a las 16:10
    Codigo:
    SELECT maestro_nombre FROM maestros 
    INNER JOIN cursos ON cursos.maestro_id = maestros.maestro_id 
    WHERE curso_hora = "16:10";
    La lista de la clase que tiene por ID "dddd"
    Codigo:
    SELECT DISTINCT cursoalumnos.alumno_id, alumno_nombre FROM alumnos 
    INNER JOIN cursoalumnos ON cursoalumnos.alumno_id = alumnos.alumno_id 
    WHERE curso_id = "dddd";
    Que maestros dan la materia de Electromagnetismo
    Codigo:
    SELECT maestro_nombre FROM maestros 
    INNER JOIN cursos ON cursos.maestro_id = maestros.maestro_id 
    INNER JOIN materias ON materias.materia_id = cursos.materia_id 
    WHERE materia_nombre = "Electromagnetismo";
    Que maestros no dan Electromagnetismo
    Codigo:
    SELECT maestro_nombre FROM maestros 
    INNER JOIN cursos ON cursos.maestro_id = maestros.maestro_id 
    INNER JOIN materias ON materias.materia_id = cursos.materia_id 
    WHERE materia_nombre != "Electromagnetismo";
    Todos los maestros que dan Electromagnetisma a las 16:10
    Codigo:
    SELECT maestro_nombre FROM maestros 
    INNER JOIN cursos ON cursos.maestro_id = maestros.maestro_id 
    INNER JOIN materias ON materias.materia_id = cursos.materia_id 
    WHERE materia_nombre = "Electromagnetismo" AND curso_hora = "16:10";
    En que salones se esta dando clase a las 16:10
    Codigo:
    SELECT curso_salon FROM cursos WHERE curso_hora = "16:10";
    Saber que alumnos no estan tomando clase a 16:10
    Codigo:
    SELECT alumno_nombre FROM alumnos 
    INNER JOIN cursoalumnos ON cursoalumnos.alumno_id = alumnos.alumno_id 
    INNER JOIN cursos ON cursos.curso_id = cursoalumnos.curso_id
    WHERE curso_hora != "16:10";
    El horario del alumno con matricula 1200001
    Codigo:
    SELECT materia_nombre,curso_hora,curso_salon FROM cursos 
    INNER JOIN materias ON materias.materia_id = cursos.materia_id 
    INNER JOIN cursoalumnos ON cursos.curso_id = cursoalumnos.curso_id 
    WHERE alumno_id = 1200001;
    El horario del alumno con la matrícula 1200001 ordenado por hora

    Codigo:
    SELECT materia_nombre,curso_hora,curso_salon FROM cursos 
    INNER JOIN materias ON materias.materia_id = cursos.materia_id 
    INNER JOIN cursoalumnos ON cursos.curso_id = cursoalumnos.curso_id  
    WHERE alumno_id = 1200001 
    ORDER BY curso_hora;
    Todos los alumnos(nombre y matricula) que tienen alguna clase con la maestro Jose

    Codigo:
    SELECT alumnos.alumno_id, alumno_nombre FROM alumnos 
    INNER JOIN cursoalumnos ON cursoalumnos.alumno_id = alumnos.alumno_id 
    INNER JOIN cursos ON cursos.curso_id = cursoalumnos.curso_id 
    INNER JOIN maestros ON maestros.maestro_id = cursos.maestro_id 
    WHERE maestro_nombre = "Jose";
    Todos los alumnos(nombre y matricula) que tienen clase con el Jessica en la materia de Electromagnetismo

    Codigo:
    SELECT alumnos.alumno_id, alumno_nombre FROM alumnos 
    INNER JOIN cursoalumnos ON cursoalumnos.alumno_id = alumnos.alumno_id 
    INNER JOIN cursos ON cursos.curso_id = cursoalumnos.curso_id 
    INNER JOIN maestros ON maestros.maestro_id = cursos.maestro_id 
    INNER JOIN materias ON materias.materia_id = cursos.materia_id 
    WHERE maestro_nombre = "Jessica" AND materia_nombre = "Electromagnetismo";
    Todos los alumnos(nombre y matricula) que tienen clase con la maestra Jessica en el salon 3401

    Codigo:
    SELECT alumnos.alumno_id, alumno_nombre FROM alumnos 
    INNER JOIN cursoalumnos ON cursoalumnos.alumno_id = alumnos.alumno_id 
    INNER JOIN cursos ON cursos.curso_id = cursoalumnos.curso_id 
    INNER JOIN maestros ON maestros.maestro_id = cursos.maestro_id 
    INNER JOIN materias ON materias.materia_id = cursos.materia_id 
    WHERE maestro_nombre = "Jessica" AND curso_salon = "3401";
    Todos los alumnos(nombre y matricula) que tienen clase con la maestra Jessica a las 16:10

    Codigo:
    SELECT alumnos.alumno_id, alumno_nombre FROM alumnos 
    INNER JOIN cursoalumnos ON cursoalumnos.alumno_id = alumnos.alumno_id 
    INNER JOIN cursos ON cursos.curso_id = cursoalumnos.curso_id 
    INNER JOIN maestros ON maestros.maestro_id = cursos.maestro_id 
    INNER JOIN materias ON materias.materia_id = cursos.materia_id 
    WHERE maestro_nombre = "Jessica" AND curso_hora = "16:10";

    Todos los maestros que le dan clase al alumno que lleva por nombre TaggerBear
    Codigo:
    SELECT maestro_nombre from maestros 
    INNER JOIN cursos ON cursos.maestro_id = maestros.maestro_id 
    INNER JOIN cursoalumnos ON cursoalumnos.curso_id = cursos.curso_id 
    INNER JOIN alumnos ON alumnos.alumno_id = cursoalumnos.alumno_id 
    WHERE alumno_nombre = "TaggerBear";

  2. #2
    Payaso Pendejo
    Fecha de Ingreso
    Feb 2011
    Mensajes
    175
    Fime Pesos
    16,210
    Chido!
    105
    Tiene 176 Chidos! en 63 Posts
    No mames!
    41
    Tiene 151 No mames! en 96 Posts
    Descargas
    16
    Uploads
    0
    Rulea, se ve que estará interesante todo el tutorial, recién estoy checando SQL con php

    Gracias por los tutoriales que has estado subiendo tagger, eres mi idolo
    Milagro que no cambian la firma, clap clap

  3. #3
    Junior Member
    Fecha de Ingreso
    Dec 2012
    Mensajes
    0
    Fime Pesos
    16,210
    Chido!
    282
    Tiene 57 Chidos! en 29 Posts
    No mames!
    34
    Tiene 6 No mames! en 3 Posts
    Descargas
    14
    Uploads
    95

    Parte 2

    SEGUNDA PARTE
    Ahora les explicare un poco que es una base de datos, para los que no son IAS.

    Una base de datos son varios datos separados y relacionados de forma jerarquica, esta jerarqu'ia es:

    Base de Datos
    Codigo:
    METAFORA                LOGICAMENTE               FISICAMENTE
    Tabla                   Archivo                   Area
    Fila                    Registro                  Bloque
    Celda/Dato              Campo                     Palabra
    ?                       Caracter                  Byte
    ?                       ?                         Bit
    Codigo:
    Nombre de la Tabla --> Entidad/Relacion
    Nombre de la Columna --> Atributo
    Entonces una base de datos es un conjunto de tablas, estos tablas son un conjunto de registros, los registros son un conjunto de campos y estos campos contienen caracteres.

    Por ejemplo en nuestra base de datos esta es una tabla/archivo:

    Codigo:
    1200001		TaggerBear	1200
    1200002		Soft		3620
    1200003		Vomito		1800
    este sería un registro
    Codigo:
    1200001		TaggerBear	1200
    este sería un campo:
    Codigo:
    1200001
    y este un caracter
    Codigo:
    1
    Ahora, SQL(que lo pronuncian "sicuel" porque antes se llamaba SEQL) es un lenguaje computacional que se encarga de solicitarle información a una base de datos mandando ordenes a un DBMS para que este regrese la información solicitada. Al la acción de solicitar información de una base de datos se le llama "consulta", que en ingles le dicen "query".

    Existen varios tipos de "querys"
    • De creación CREATE
      Estas sirven para crear bases de datos, tablas, indices, etc
    • De selección SELECT
      Estas sirven para traer información
    • De inserción INSERT INTO
      Son para ingresar o agregar nuevos datos en los campos
    • De actualización ALTER
      Son para actualizar un dato en un campo
    • De eliminación DELETE
      Son para eliminar datos o registros de una tabla

    MySQL es un Administrador de Bases de Datos Relacionales(RDBMS), que funciona en forma de servidor, es decir que es un programa que espera solicitudes de otros programas que se les llama "clientes".

    MySQL se conforma de varios programas, ninguno de ellos tiene GUI, osea que todos se manejan por consola, los dos programas mas importantes son:
    mysqld ---> es el servidor, significa "MySQL daemon"
    mysql ---> es el RDBMS, este es un cliente de mysqld

    Entonces para poder crear, modificar y eliminar bases de datos en MySQL tenemos que usar el programa mysql, pero para poder usarlo antes tenemos que correr mysqld

    Otros DBMS populares son:

    pero los pros siempre recomiendan comenzar con MySQL porque es el mas fácil de usar y es gratis. Si no te gustan los programas de consola existen varios clientes de MySQL con interfaz gráfica:

  4. #4
    Junior Member
    Fecha de Ingreso
    Dec 2012
    Mensajes
    0
    Fime Pesos
    16,210
    Chido!
    282
    Tiene 57 Chidos! en 29 Posts
    No mames!
    34
    Tiene 6 No mames! en 3 Posts
    Descargas
    14
    Uploads
    95

    Tercera parte

    TERCERA PARTE

    Ahora lo que haremos sera una aplicación con GUI, que nos permitira acceder a la base de datos para agregar, modificar y eliminar registros o datos en un registro, para esto utilizaremos el lenguaje de programación Pynthon y la librería de widgets Tkinter.

    Para comenzar primero tenemos que saber que tanto queremos que haga nuestro aplicación, y el diseño de las "pantallas".

    Vamos a gliffy.com o a framebox.org para dibujar las pantallas:

    Ahora verificamos que Python este instalado en nuestro sistema
    Codigo:
    which python
    si no les sale algo como esto quiere decir que no lo tienen instalado::
    Codigo:
    /usr/bin/python
    y checamos también si tenemos el modulo tkinter
    Codigo:
    python
    import Tkinter
    Si les sale este error quiere decir que no lo tienen instalado:
    Codigo:
    Traceback (most recent call last):
      File "", line 1, in 
    ImportError: No module named Tkinter
    Comencemos haciendo una ventanita sin nada:
    Codigo:
    #!/usr/bin/python
    from Tkinter import *
    
    venprincipal = Tk()
    venprincipal.mainloop()
    Para los que ya saben C++ o Java y estan acostumbrados a ver un método main, en Pyton no se necesita pero podemos ponerlo, así:
    Codigo:
    #!/usr/bin/python
    from Tkinter import *
    
    def main():
    	venprincipal = Tk()
    	venprincipal.mainloop()
     
    if __name__ == '__main__':
    	main()
    En la primer línea le decimos al interprete que ejecute primero la librería/modulo Tkinter
    En la tercer línea definimos una función a la cual llamamos main
    Dentro de este método creamos un objeto tipo Tk al cual llamamos venprincipal
    Luego llamamos al método mainloop() del objeto venprincipal
    Por último preguntamos algo como esto:
    SI el nombre de este programa es igual a el nombre del programa en ejecución entonces corre la función main()

    Ahora la primer "pantalla" que haremos sera la que tiene la forma para visualizar, modificar y eliminar registros.

    Codigo:
    #!/usr/bin/python
    from Tkinter import *
    
    def main():
    	venprincipal = Tk()
    	lp = Label(venprincipal, text="Alumnos")
    	l1 = Label(venprincipal, text="Id:")
    	l2 = Label(venprincipal, text="Nombre:")
    	l3 = Label(venprincipal, text="Adeudo:")
    	c1 = Entry(venprincipal)
    	c2 = Entry(venprincipal)
    	c3 = Entry(venprincipal)
    	b1 = Button(venprincipal, text="Nuevo")
    	b2 = Button(venprincipal, text="Modificar")
    	b3 = Button(venprincipal, text="Eliminar")
    	b4 = Button(venprincipal, text="<")
    	b5 = Button(venprincipal, text=">")
    	lp.pack()
    	l1.pack()
    	l2.pack()
    	l3.pack()
    	c1.pack()
    	c2.pack()
    	c3.pack()
    	b1.pack()
    	b2.pack()
    	b3.pack()
    	b4.pack()
    	b5.pack()
    	venprincipal.mainloop()
     
    if __name__ == '__main__':
    	main()


    Genial, ya tenemos todos los widgets que necesitamos solo que no estan ordenados, para eso usamos una forma de distribuir los widgets como si estuvieran en una tabla, mas o menos como en las tablas de HTML.

    Codigo:
    #!/usr/bin/python
    from Tkinter import *
    
    def main():
    	venprincipal = Tk()
    	lp = Label(venprincipal, text="Alumnos")
    	l1 = Label(venprincipal, text="Id:")
    	l2 = Label(venprincipal, text="Nombre:")
    	l3 = Label(venprincipal, text="Adeudo:")
    	c1 = Entry(venprincipal)
    	c2 = Entry(venprincipal)
    	c3 = Entry(venprincipal)
    	b1 = Button(venprincipal, text="Nuevo")
    	b2 = Button(venprincipal, text="Modificar")
    	b3 = Button(venprincipal, text="Eliminar")
    	b4 = Button(venprincipal, text="<")
    	b5 = Button(venprincipal, text=">")
    	lp.grid(row=0, column=0, columnspan=5)
    	l1.grid(row=1, column=0, columnspan=2)
    	l2.grid(row=2, column=0, columnspan=2)
    	l3.grid(row=3, column=0, columnspan=2)
    	c1.grid(row=1, column=2, columnspan=3)
    	c2.grid(row=2, column=2, columnspan=3)
    	c3.grid(row=3, column=2, columnspan=3)
    	b1.grid(row=4, column=0)
    	b2.grid(row=4, column=1)
    	b3.grid(row=4, column=2)
    	b4.grid(row=4, column=3)
    	b5.grid(row=4, column=4)
    	venprincipal.mainloop()
     
    if __name__ == '__main__':
    	main()


    Bueno pues lo único nuevo que hicimos fue crear cada uno de los widgets que necesitamos para esta forma, que son, etiquetas, campos de texto y botones, para crear un objeto tipo etiqueta usamos Label(venprincipal, text="texto"), el primer parametro nos pide que le digamos en que ventana va a ir esa etiqueta y el segundo nos pide una serie de opciones pero en este caso solo usamos una que es "text" que sirve para definir que texto va a tener la etiqueta, lo mismo se hace para crear cada campo de texto y cada boton.

    Ahora bien lo bueno, las consultas a MySQL y defiinir que pasa al dar clic en los botones

    Codigo:
    #!/usr/bin/python
    from Tkinter import *
    import MySQLdb
    
    ii = 0
    xx = 0
    yy = 1
    zz = 2
    resultado = ((0,0,0))
    
    def leertabla():
    	global resultado
    	conexion = MySQLdb.connect( user="root", passwd="", db="escuela" )
    	cursorr = conexion.cursor()
    	query = "SELECT * FROM alumnos"
    	cursorr.execute(query)
    	resultado = cursorr.fetchall()
    	cursorr.close()
    	conexion.commit()
    	conexion.close()
    	c1.delete(0,END)
    	c2.delete(0,END)
    	c3.delete(0,END)
    	c1.insert(INSERT, resultado[ii][xx])
    	c2.insert(INSERT, resultado[ii][yy])
    	c3.insert(INSERT, resultado[ii][zz])
    
    def nuevo():
    	global resultado
    	print(resultado)
    	print(resultado[0])
    	print(resultado[0][0])
    
    def modificar():
    	print("modificar")
    
    def eliminar():
    	print("eliminar")
    
    def atras():
    	global ii, resultado
    	ii = ii - 1
    	c1.delete(0,END)
    	c2.delete(0,END)
    	c3.delete(0,END)
    	c1.insert(INSERT, resultado[ii][xx])
    	c2.insert(INSERT, resultado[ii][yy])
    	c3.insert(INSERT, resultado[ii][zz])
    
    def adelante():
    	global ii, resultado
    	ii = ii + 1
    	c1.delete(0,END)
    	c2.delete(0,END)
    	c3.delete(0,END)
    	c1.insert(INSERT, resultado[ii][xx])
    	c2.insert(INSERT, resultado[ii][yy])
    	c3.insert(INSERT, resultado[ii][zz])
    
    def main():
    	global c1,c2,c3
    	venprincipal = Tk()
    	lp = Label(venprincipal, text="Alumnos")
    	l1 = Label(venprincipal, text="Id:")
    	l2 = Label(venprincipal, text="Nombre:")
    	l3 = Label(venprincipal, text="Adeudo:")
    	c1 = Entry(venprincipal)
    	c2 = Entry(venprincipal)
    	c3 = Entry(venprincipal)
    	b1 = Button(venprincipal, text="Nuevo", command=nuevo)
    	b2 = Button(venprincipal, text="Modificar", command=modificar)
    	b3 = Button(venprincipal, text="Eliminar", command=eliminar)
    	b4 = Button(venprincipal, text="<", command=atras)
    	b5 = Button(venprincipal, text=">", command=adelante)
    	lp.grid(row=0, column=0, columnspan=5)
    	l1.grid(row=1, column=0, columnspan=2)
    	l2.grid(row=2, column=0, columnspan=2)
    	l3.grid(row=3, column=0, columnspan=2)
    	c1.grid(row=1, column=2, columnspan=3)
    	c2.grid(row=2, column=2, columnspan=3)
    	c3.grid(row=3, column=2, columnspan=3)
    	b1.grid(row=4, column=0)
    	b2.grid(row=4, column=1)
    	b3.grid(row=4, column=2)
    	b4.grid(row=4, column=3)
    	b5.grid(row=4, column=4)
    	leertabla()
    	venprincipal.mainloop()
     
    if __name__ == '__main__':
    	main()
    Lo nuevo que se ve aquí es que incluimos el modulo MySQLdb(que es el que nos conecta a el servidor de MySQL), 4 variables globales, y también creamos 6 funciones:

    leertabla()
    Hace una solicitud a la base de datos para traer toda la información de la tabla "alumnos", esta información se guarda en una tupla/fila que llamamos "resultado"

    nuevo() lo que pasara al darle clic al boton nuevo
    modificar() lo que pasara al darle clic al boton modificar
    eliminar() lo que pasara al darle cilc al boton eliminar

    atras()
    Le resta uno a ii
    elimina el texto que hay en cada campo
    luego inserta el texto de cada valor dentro del nuevo indice de la fila resultado
    por ejemplo si quieren ver el contenido de resultado
    resultado
    es
    ((1200001L, 'TaggerBear', 1200L), (1200002L, 'Soft', 3620L), (1200003L, 'Vomito', 1800L))

    resultado[0]
    es
    (1200001L, 'TaggerBear', 1200L)

    resultado[0][0]
    es
    1200001L


    adelante()
    Hace lo mismo que atras() pero aquí le sumo uno a ii

    Hasta el momento lo único que hace la aplicación es ver los registros uno por uno con los botones que tienen las flechas( '<' y '>' ), en las siguientes "PARTEs" vamos a ir metiendole código a las demás funicones.

  5. #5
    Junior Member
    Fecha de Ingreso
    Dec 2012
    Mensajes
    0
    Fime Pesos
    16,210
    Chido!
    282
    Tiene 57 Chidos! en 29 Posts
    No mames!
    34
    Tiene 6 No mames! en 3 Posts
    Descargas
    14
    Uploads
    95

    Cuarta parte

    CUARTA PARTE

    Codigo:
    #!/usr/bin/python
    from Tkinter import *
    import MySQLdb
    
    ii = 0
    xx = 0
    yy = 1
    zz = 2
    resultado = ((0,0,0))
    
    def leertabla():
    	global ii,xx,yy,zz,resultado,l1,l2,l3,l4,c1,c2,c3,b1,b2,b3,b4,b5
    	conexion = MySQLdb.connect( user="root", passwd="", db="escuela" )
    	cursor = conexion.cursor()
    	query = "SELECT * FROM alumnos"
    	cursor.execute(query)
    	resultado = cursor.fetchall()
    	cursor.close()
    	conexion.commit()
    	conexion.close()
    	c1.config( state=NORMAL )
    	c2.config( state=NORMAL )
    	c3.config( state=NORMAL )
    	c1.delete(0,END)
    	c2.delete(0,END)
    	c3.delete(0,END)
    	c1.insert(INSERT, resultado[ii][xx])
    	c2.insert(INSERT, resultado[ii][yy])
    	c3.insert(INSERT, resultado[ii][zz])
    	c1.config( state=DISABLED )
    	c2.config( state=DISABLED )
    	c3.config( state=DISABLED )
    
    def nuevo():
    	global ii,xx,yy,zz,l1,l2,l3,l4,c1,c2,c3,b1,b2,b3,b4,b5
    	b1.config( text="Agregar", command=agregar )
    	l4.config( text="Estas creando un nuevo registro,\ncuando termines da clic en \"Agregar\"" )
    	c1.config( state=NORMAL )
    	c2.config( state=NORMAL )
    	c3.config( state=NORMAL )
    	c1.delete(0,END)
    	c2.delete(0,END)
    	c3.delete(0,END)
    
    def agregar():
    	global ii,xx,yy,zz,l1,l2,l3,l4,c1,c2,c3,b1,b2,b3,b4,b5
    	b1.config( text="Nuevo", command=nuevo )
    	l4.config( text="" )
    	x = c1.get()
    	y = c2.get()
    	z = c3.get()
    	conexion = MySQLdb.connect( user="root", passwd="", db="escuela" )
    	cursor = conexion.cursor()
    	query = "INSERT INTO alumnos(alumno_id, alumno_nombre, alumno_adeudo) VALUES(%s,\"%s\",%s);" % (x,y,z)
    	cursor.execute(query)
    	cursor.close()
    	conexion.commit()
    	conexion.close()
    	c1.config( state=DISABLED )
    	c2.config( state=DISABLED )
    	c3.config( state=DISABLED )
    	leertabla()
    
    def modificar():
    	global ii,xx,yy,zz,l1,l2,l3,l4,c1,c2,c3,b1,b2,b3,b4,b5
    	b2.config( text="Actualizar", command=actualizar )
    	l4.config( text="Estas modificando un registro,\ncuando termines da clic en \"Actualizar\"" )
    	c1.config( state=NORMAL )
    	c2.config( state=NORMAL )
    	c3.config( state=NORMAL )
    
    def actualizar():
    	global ii,xx,yy,zz,l1,l2,l3,l4,c1,c2,c3,b1,b2,b3,b4,b5
    	b2.config( text="Modificar", command=modificar )
    	l4.config( text="" )
    	x = c1.get()
    	y = c2.get()
    	z = c3.get()
    	conexion = MySQLdb.connect( user="root", passwd="", db="escuela" )
    	cursor = conexion.cursor()
    	query = "UPDATE alumnos SET alumno_id=%s, alumno_nombre=\"%s\", alumno_adeudo=%s WHERE alumno_id=%s" % (x,y,z,c1.get())
    	cursor.execute(query)
    	cursor.close()
    	conexion.commit()
    	conexion.close()
    	c1.config( state=DISABLED )
    	c2.config( state=DISABLED )
    	c3.config( state=DISABLED )
    	leertabla()
    
    
    def eliminar():
    	global ii,xx,yy,zz,l1,l2,l3,l4,c1,c2,c3,b1,b2,b3,b4,b5
    	c1.config( state=NORMAL )
    	c2.config( state=NORMAL )
    	c3.config( state=NORMAL )
    	conexion = MySQLdb.connect( user="root", passwd="", db="escuela" )
    	cursor = conexion.cursor()
    	query = "DELETE FROM alumnos WHERE alumno_id=%s" % (c1.get())
    	cursor.execute(query)
    	cursor.close()
    	conexion.commit()
    	conexion.close()
    	c1.config( state=DISABLED )
    	c2.config( state=DISABLED )
    	c3.config( state=DISABLED )
    	ii = 0
    	leertabla()
    
    
    def atras():
    	global ii,xx,yy,zz,resultado,l1,l2,l3,l4,c1,c2,c3,b1,b2,b3,b4,b5
    	ii = ii - 1
    	if ii == 0:
    		b4.config( state=DISABLED )
    	else:
    		b4.config( state=NORMAL )
    	if ii == (len(resultado)-1):
    		b5.config( state=DISABLED )
    	else:
    		b5.config( state=NORMAL )
    	c1.config( state=NORMAL )
    	c2.config( state=NORMAL )
    	c3.config( state=NORMAL )
    	c1.delete(0,END)
    	c2.delete(0,END)
    	c3.delete(0,END)
    	c1.insert(INSERT, resultado[ii][xx] )
    	c2.insert(INSERT, resultado[ii][yy] )
    	c3.insert(INSERT, resultado[ii][zz] )
    	c1.config( state=DISABLED )
    	c2.config( state=DISABLED )
    	c3.config( state=DISABLED )
    
    
    
    def adelante():
    	global ii,xx,yy,zz,resultado,l1,l2,l3,l4,c1,c2,c3,b1,b2,b3,b4,b5
    	ii = ii + 1
    	if ii == (len(resultado)-1):
    		b5.config( state=DISABLED )
    	else:
    		b5.config( state=NORMAL )
    	if ii == 0:
    		b4.config( state=DISABLED )
    	else:
    		b4.config( state=NORMAL )
    	c1.config( state=NORMAL )
    	c2.config( state=NORMAL )
    	c3.config( state=NORMAL )
    	c1.delete(0,END)
    	c2.delete(0,END)
    	c3.delete(0,END)
    	c1.insert(INSERT, resultado[ii][xx] ) 
    	c2.insert(INSERT, resultado[ii][yy] ) 
    	c3.insert(INSERT, resultado[ii][zz] ) 
    	c1.config( state=DISABLED )
    	c2.config( state=DISABLED )
    	c3.config( state=DISABLED )
    
    
    def main():
    	global ii,xx,yy,zz,resultado,l1,l2,l3,l4,c1,c2,c3,b1,b2,b3,b4,b5
    
    	venprincipal = Tk()
    	lp = Label(venprincipal, text="Alumnos", font=('Arial',20,'bold'))
    	l1 = Label(venprincipal, text="Id:", anchor=E, width=17)
    	l2 = Label(venprincipal, text="Nombre:", anchor=E, width=17)
    	l3 = Label(venprincipal, text="Adeudo:", anchor=E, width=17)
    	l4 = Label(venprincipal, text="" )
    	c1 = Entry(venprincipal)
    	c2 = Entry(venprincipal)
    	c3 = Entry(venprincipal)
    	b1 = Button(venprincipal, text="Nuevo", command=nuevo)
    	b2 = Button(venprincipal, text="Modificar", command=modificar)
    	b3 = Button(venprincipal, text="Eliminar", command=eliminar)
    	b4 = Button(venprincipal, text="<", command=atras)
    	b5 = Button(venprincipal, text=">", command=adelante)
    	lp.grid(row=0, column=0, columnspan=5)
    	l1.grid(row=1, column=0, columnspan=2)
    	l2.grid(row=2, column=0, columnspan=2)
    	l3.grid(row=3, column=0, columnspan=2)
    	l4.grid(row=4, column=0, columnspan=5)
    	c1.grid(row=1, column=2, columnspan=3)
    	c2.grid(row=2, column=2, columnspan=3)
    	c3.grid(row=3, column=2, columnspan=3)
    	b1.grid(row=5, column=0)
    	b2.grid(row=5, column=1)
    	b3.grid(row=5, column=2)
    	b4.grid(row=5, column=3)
    	b5.grid(row=5, column=4)
    	leertabla()
    	venprincipal.mainloop()
     
    if __name__ == '__main__':
    	main()



  6. #6
    Junior Member
    Fecha de Ingreso
    Dec 2012
    Mensajes
    0
    Fime Pesos
    16,210
    Chido!
    282
    Tiene 57 Chidos! en 29 Posts
    No mames!
    34
    Tiene 6 No mames! en 3 Posts
    Descargas
    14
    Uploads
    95
    QUINTA PARTE la última

    Codigo:
    #!/usr/bin/python
    from Tkinter import *
    import tkMessageBox
    import MySQLdb
    
    ii = 0
    xx = 0
    yy = 1
    zz = 2
    resultado = ((0,0,0))
    
    def leertabla():
    	global ii,xx,yy,zz,resultado,l1,l2,l3,l4,c1,c2,c3,b1,b2,b3,b4,b5
    	conexion = MySQLdb.connect( user="root", passwd="", db="escuela" )
    	cursor = conexion.cursor()
    	query = "SELECT * FROM alumnos"
    	cursor.execute(query)
    	resultado = cursor.fetchall()
    	cursor.close()
    	conexion.commit()
    	conexion.close()
    	c1.config( state=NORMAL )
    	c2.config( state=NORMAL )
    	c3.config( state=NORMAL )
    	c1.delete(0,END)
    	c2.delete(0,END)
    	c3.delete(0,END)
    	c1.insert(INSERT, resultado[ii][xx])
    	c2.insert(INSERT, resultado[ii][yy])
    	c3.insert(INSERT, resultado[ii][zz])
    	c1.config( state=DISABLED )
    	c2.config( state=DISABLED )
    	c3.config( state=DISABLED )
    
    def nuevo():
    	global ii,xx,yy,zz,l1,l2,l3,l4,c1,c2,c3,b1,b2,b3,b4,b5
    	b1.config( text="Agregar", command=agregar )
    	l4.config( text="Estas creando un nuevo registro,\ncuando termines da clic en \"Agregar\"" )
    	c1.config( state=NORMAL )
    	c2.config( state=NORMAL )
    	c3.config( state=NORMAL )
    	c1.delete(0,END)
    	c2.delete(0,END)
    	c3.delete(0,END)
    
    def agregar():
    	global ii,xx,yy,zz,l1,l2,l3,l4,c1,c2,c3,b1,b2,b3,b4,b5
    	b1.config( text="Nuevo", command=nuevo )
    	l4.config( text="" )
    	x = c1.get()
    	y = c2.get()
    	z = c3.get()
    	conexion = MySQLdb.connect( user="root", passwd="", db="escuela" )
    	cursor = conexion.cursor()
    	query = "INSERT INTO alumnos(alumno_id, alumno_nombre, alumno_adeudo) VALUES(%s,\"%s\",%s);" % (x,y,z)
    	cursor.execute(query)
    	cursor.close()
    	conexion.commit()
    	conexion.close()
    	c1.config( state=DISABLED )
    	c2.config( state=DISABLED )
    	c3.config( state=DISABLED )
    	leertabla()
    
    def modificar():
    	global ii,xx,yy,zz,l1,l2,l3,l4,c1,c2,c3,b1,b2,b3,b4,b5
    	b2.config( text="Actualizar", command=actualizar )
    	l4.config( text="Estas modificando un registro,\ncuando termines da clic en \"Actualizar\"" )
    	c1.config( state=NORMAL )
    	c2.config( state=NORMAL )
    	c3.config( state=NORMAL )
    
    def actualizar():
    	global ii,xx,yy,zz,l1,l2,l3,l4,c1,c2,c3,b1,b2,b3,b4,b5
    	b2.config( text="Modificar", command=modificar )
    	l4.config( text="" )
    	x = c1.get()
    	y = c2.get()
    	z = c3.get()
    	conexion = MySQLdb.connect( user="root", passwd="", db="escuela" )
    	cursor = conexion.cursor()
    	query = "UPDATE alumnos SET alumno_id=%s, alumno_nombre=\"%s\", alumno_adeudo=%s WHERE alumno_id=%s" % (x,y,z,c1.get())
    	cursor.execute(query)
    	cursor.close()
    	conexion.commit()
    	conexion.close()
    	c1.config( state=DISABLED )
    	c2.config( state=DISABLED )
    	c3.config( state=DISABLED )
    	leertabla()
    
    def eliminar():
    	global ii,xx,yy,zz,l1,l2,l3,l4,c1,c2,c3,b1,b2,b3,b4,b5
    	if tkMessageBox.askyesno("Eliminacion de registro", "Estas realmente seguro de desear eliminar este registro?"):
    		c1.config( state=NORMAL )
    		c2.config( state=NORMAL )
    		c3.config( state=NORMAL )
    		conexion = MySQLdb.connect( user="root", passwd="", db="escuela" )
    		cursor = conexion.cursor()
    		query = "DELETE FROM alumnos WHERE alumno_id=%s" % (c1.get())
    		cursor.execute(query)
    		cursor.close()
    		conexion.commit()
    		conexion.close()
    		c1.config( state=DISABLED )
    		c2.config( state=DISABLED )
    		c3.config( state=DISABLED )
    		ii = 0
    		leertabla()
    
    def atras():
    	global ii,xx,yy,zz,resultado,l1,l2,l3,l4,c1,c2,c3,b1,b2,b3,b4,b5
    	ii = ii - 1
    	if ii == 0:
    		b4.config( state=DISABLED )
    	else:
    		b4.config( state=NORMAL )
    	if ii == (len(resultado)-1):
    		b5.config( state=DISABLED )
    	else:
    		b5.config( state=NORMAL )
    	c1.config( state=NORMAL )
    	c2.config( state=NORMAL )
    	c3.config( state=NORMAL )
    	c1.delete(0,END)
    	c2.delete(0,END)
    	c3.delete(0,END)
    	c1.insert(INSERT, resultado[ii][xx] )
    	c2.insert(INSERT, resultado[ii][yy] )
    	c3.insert(INSERT, resultado[ii][zz] )
    	c1.config( state=DISABLED )
    	c2.config( state=DISABLED )
    	c3.config( state=DISABLED )
    
    def adelante():
    	global ii,xx,yy,zz,resultado,l1,l2,l3,l4,c1,c2,c3,b1,b2,b3,b4,b5
    	ii = ii + 1
    	if ii == (len(resultado)-1):
    		b5.config( state=DISABLED )
    	else:
    		b5.config( state=NORMAL )
    	if ii == 0:
    		b4.config( state=DISABLED )
    	else:
    		b4.config( state=NORMAL )
    	c1.config( state=NORMAL )
    	c2.config( state=NORMAL )
    	c3.config( state=NORMAL )
    	c1.delete(0,END)
    	c2.delete(0,END)
    	c3.delete(0,END)
    	c1.insert(INSERT, resultado[ii][xx] ) 
    	c2.insert(INSERT, resultado[ii][yy] ) 
    	c3.insert(INSERT, resultado[ii][zz] ) 
    	c1.config( state=DISABLED )
    	c2.config( state=DISABLED )
    	c3.config( state=DISABLED )
    
    def venalu():
    	global popup,ii,xx,yy,zz,resultado,l1,l2,l3,l4,c1,c2,c3,b1,b2,b3,b4,b5
    	popup = Toplevel()              
    	lp = Label(popup, text="Alumnos", font=('Arial',20,'bold'))
    	l1 = Label(popup, text="Id:", anchor=E, width=17)
    	l2 = Label(popup, text="Nombre:", anchor=E, width=17)
    	l3 = Label(popup, text="Adeudo:", anchor=E, width=17)
    	l4 = Label(popup, text="" )
    	c1 = Entry(popup)
    	c2 = Entry(popup)
    	c3 = Entry(popup)
    	b1 = Button(popup, text="Nuevo", command=nuevo)
    	b2 = Button(popup, text="Modificar", command=modificar)
    	b3 = Button(popup, text="Eliminar", command=eliminar)
    	b4 = Button(popup, text="<", command=atras)
    	b5 = Button(popup, text=">", command=adelante)
    	b6 = Button(popup, text="Salir", command=popup.destroy )
    	lp.grid(row=0, column=0, columnspan=5)
    	l1.grid(row=1, column=0, columnspan=2)
    	l2.grid(row=2, column=0, columnspan=2)
    	l3.grid(row=3, column=0, columnspan=2)
    	l4.grid(row=4, column=0, columnspan=5)
    	c1.grid(row=1, column=2, columnspan=3)
    	c2.grid(row=2, column=2, columnspan=3)
    	c3.grid(row=3, column=2, columnspan=3)
    	b1.grid(row=5, column=0)
    	b2.grid(row=5, column=1)
    	b3.grid(row=5, column=2)
    	b4.grid(row=5, column=3)
    	b5.grid(row=5, column=4)
    	b6.grid(row=6, column=0, columnspan=5)
    	leertabla()
    	popup.grab_set()
    	popup.focus_set()
    	popup.wait_window()
    
    def venmae():
           pass
    
    def venmat():
            pass
    
    def vencur():
            pass
    
    def venlis():
            pass
    
    def vencon():
    	global popup, entradacon, areadetexto
    	popup = Toplevel()
    	areadetexto = Text(popup)
    	etiquetacon = Label(popup, text="Query:", width=10)
    	entradacon = Entry(popup, width=40)
    	botoncon = Button(popup, text="Enviar", command=consulta)
    	areadetexto.grid(row=0, column=0, columnspan=2)
    	etiquetacon.grid(row=1, column=0)
    	entradacon.grid(row=1, column=1)
    	botoncon.grid(row=2, column=0, columnspan=2)
    	popup.grab_set()
    	popup.focus_set()
    	popup.wait_window()
    
    def consulta():
    	global entradacon, areadetexto
    	conexion = MySQLdb.connect( user="root", passwd="", db="escuela" )
    	cursor = conexion.cursor()
    	query = entradacon.get()
    	cursor.execute(query)
    	resultado = cursor.fetchall()
    	salida = ""
    	for x in resultado:
    		lar = len(x)
    		for i in range(0, lar):
    			salida = salida + "{0}\t\t".format( x[i] )
    		salida = salida + "\n"
    	areadetexto.insert(INSERT, salida)
    	cursor.close
    	conexion.commit()
    	conexion.close()
    
    
    
    def main():
    	global ii,xx,yy,zz,resultado,l1,l2,l3,l4,c1,c2,c3,b1,b2,b3,b4,b5
    	venprincipal = Tk()
    	label1 = Label(text="PseudoSchool Manager v1.0", font=(('Arial',20,'bold')))
    	boton1 = Button(venprincipal, text="Alumnos", command=venalu)
    	boton2 = Button(venprincipal, text="Maestros", command=venmae)
    	boton3 = Button(venprincipal, text="Materias", command=venmat)
    	boton4 = Button(venprincipal, text="Cursos", command=vencur)
    	boton5 = Button(venprincipal, text="Listas", command=venlis)
    	boton6 = Button(venprincipal, text="Consultas", command=vencon)
    	boton7 = Button(venprincipal, text="Salir", command=venprincipal.quit)
    	label1.grid(row=0, column=0, columnspan=5)
    	boton1.grid(row=1, column=0)
    	boton2.grid(row=1, column=1)
    	boton3.grid(row=1, column=2)
    	boton4.grid(row=1, column=3)
    	boton5.grid(row=1, column=4)
    	boton6.grid(row=2, column=0, columnspan=5)
    	boton7.grid(row=3, column=4)
    	venprincipal.mainloop()
     
    if __name__ == '__main__':
    	main()
    No esta terminado, me faltaron las formas para las demas tablas y la de "Listas" iva a tener un GridView para ver las listas de alumnos inscritos en los diferentes cursos.

    Ahora la ventana principal es la que tiene la etiqueta "PseudoSchool Manager v1.0", y al hacer clic en cualquiera de los botones se crea otra ventana con la forma.

    La pantalla de consultas tiene una area de texto, una etiqueta, una campo de texto y un boton, allí se pueden hacer consultas de todo tipo a la base de datos.

    Ya ahí le dejamos, es mucho código y llega un momento en que ya no tienes control, lo mejor sería hacerlo orientado a objetos ne vez de procedural como lo tenemos ahí, así podríamos separar cada ventana en un clase.






    Todo el código de este hilo esta bajo la licencia GPL(ya que yo me copie mucho código de varias páginas) puedes usar este código para hacer lo que quieras siempre y cuando compartas tus modificaciones, la idea es que la raza lo use como referencia para sus proyectos de las siguientes materias:
    - Programación Avanzada I y II
    - Base de Datos y Lenguajes
    - Simulación de Sistemas
    - Proyecto IAS II

    Yo se que hay programas como: Visual FoxPro, Visual Studio, Delphi, etc, en los que haces las ventanas/pantallas, las bases de datos y los querys visualmente, y te generan el código de estos automaticamente, que es a lo que le llaman RAD(Rapid Application Development), pero si aquí estamos aprendiendo y no tenemos fecha límite de entrega de la aplicación terminada, ¿por qué no hacerlo lentamente con puro código?, para mi está es la mejor manera de aprender a programar.

    Ahora la idea es portar este sistemita a web con JavaScript crudo usando XHR para comunicarse con scripts de PHP.


 

Etiquetas para este Tema

Permisos de Publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •