domingo, 23 de octubre de 2011

CONEXION PYTHON3 MYSQL

Bueno en este nuevo post mostrare como se lleva a cabo la conexion con una base en mysql.
En primer lugar y aunque parece obvio no olvidemos instalar el modulo para conexion ODBC para MySQL ya que realizaremos la conexion por este medio.  Aclaro que python tambien permite la conexion por ADO pero esta tematica la abordare mas adelante ya que estoy centrado en este momento en aplicaciones de escritorio y posteriormente incursionare en aplicaciones web.

Ahora iniciaremos con la conexion:
Asignamos como una cadena de caracteres el driver de conexion, el servidor de la base de datos, el nombre de la base de datos el usuario y la contraseña para acceder la base de datos, asi:


>>> conectstring='DRIVER={MySQL ODBC 5.1 Driver}; SERVER=localhost; DATABASE=pruebapython; USER=root; PASSWORD=kanivales;'


En el campo 'SERVER' ponemos localhost si la base esta en el mismo equipo o con el identificador de red ya sea nombre de equipo o ip tambien es posible, creo que los otros campos son claros.
Ahora debemos utilizar el metodo connect presente en el controlador pyodbc. Aclaro que dependiendo del modulo de mysql utilizado cambian un poco los metodos pero la estructura coincide para todos los modulos.
>>> cnxn=pyodbc.connect(conectstring)


En cnxn se almacenara el estado de la conexion.
Ahora utilizamos el metodo cursor que lo que hace basicamente es la conexion entre el interprete de MySQL y python. La siguiente linea de codigo solo inicializa el cursor:

>>> cursor=cnxn.cursor()


Bien en este momento ya tenemos conectado python y la base de datos creada en MySQL, ahora ingresaremos sentencias SQL para poder ingresar datos y realizar consultas.



>>> sql='INSERT INTO nombre VALUES ("virginia")'
>>> cursor.execute(sql)
<pyodbc.Cursor object at 0x00000000028FCC90>

La variable sql almacena una cadena string que contiene la sentencia SQL, luego en la siguiente linea el método execute nos permite ingresar la sentencia sin embargo el cambio sobre la base de datos no ocurrira hasta que ejecutemos la siguiente instrucción:

>>> cnxn.commit()


Ahora si podemos verificar la base de datos y debe estar el nombre 'virginia' en la tabla.






Como observamos en efecto se modifico la tabla directamente desde python3, en los proximos post mostrare como realizar las consultas modificar datos ya escritos crear tablas y borrar tablas desde python, y para no perder de vista el objetivo luego realizaremos lo mismo desde tkinter asi que suerte!!!

Conexión de python3 con bases de datos

Estaba verificando las capacidades de python3 en cuanto a la conexión con otras aplicaciones, ya que sabemos que en la actualidad ningún entorno de software se programa en un solo lenguaje o una sola plataforma y encontré que es posible conectar python con cualquier motor de bases datos desde el sencillo access hasta complejas bases de datos sobre oracle.
A continuación desarrollaremos paso a paso la manera de conectar python 3 con una base de datos desarrollada en mysql.  Es un ejemplo bastante sencillo pero tratare de explicar como se realiza la conexión ya que según lo que investigue la información esta muy dispersa y tuve bastante problemas para realizar la conexion.

En primer lugar es necesario descargar el modulo de conexion para python dependiendo de la base de datos a utilizar y de la version de python que se tenga. Recomiendo que actualicen su version de python a la 3.2 para no tener inconvenientes en la conexion.
En este link encuentran los diferentes drivers .

Como yo desarrollo sobre windows y tengo python 3.2 descargue este driver, ademas de estar desarrollado especialmente para esta version de python viene en forma de ejecutable para instalarlo y esto nos ahorrara tiempo buscando como instalarlo.

ya teniendo el driver pyodbc instalado podemos proceder a realizar nuestra conexion.
Asumo que ya conocen el lenguaje SQL para bases de datos y que conocen MySQL, sin embargo mostrare como se crea la base de datos que utilizaremos para el ejemplo:
Desde la linea de comandos de MySQL digitamos como se muestra a continuacion:

con el comando show databases; podemos ver que bases de datos se encuentran creadas.
Ahora crearemos una base de datos denominada prueba python:
con el comando create databases ;  prueba python fue creada la base de datos.
Crearemos una tabla denominada nombre que recibira datos de tipo char de la siguiente manera:
Se observa que se creo una tabla llamada nombre con un solo campo llamado nom, esto con fines de facilitar el ejemplo pues como uds saben pueden incluir la cantidad de campos que necesiten.
Ahora escribiremos un dato para asegurarnos que tenemos la base de datos como la necesitamos:
con el comando insert into nombre values ('jorge') escribimos el nombre jorge en la tabla, y con el comando select * from nombre consultamos todos los datos presentes en la tabla.

Con esto ya tenemos lista la base de datos y ahora como lo prometido es deuda en el proximo post mostrare como se realiza la conexion, suerte!!

sábado, 8 de octubre de 2011

MANEJO DE CAJAS DE TEXTO

Realizaremos un paréntesis con el desarrollo de nuestra calculadora ya que me parece importante comprender el alcance y el manejo de los otros widgets disponibles en el modulo tkinter de python3.

A continuación mostraremos una aplicación que combina el manejo botones, label, mensajes y cajas de texto, la cual consiste en capturar un usuario y una contraseña y compararla con datos configurados dentro del codigo, es una pequeña aplicación de autenticacion.
Aclaro que una aplicación de este tipo debe ser mas robusta para que ofrezca seguridad, sin embargo el objetivo de mostrar esta aplicación es con el objetivo de entender el manejo de los widget.

La interfaz de la aplicación queda de esta manera:
como se observa se utilizaron 2 cajas de texto, 2 label para indicar los campos y dos botones. Se debe llenar los campos correspondientes, si los datos son correctos sale un mensaje que dice bien, de lo contrario el mensaje dice mal, tal como se muestra a continuación:
El usuario y la contraseña correctas son usuario: hola y contraseña: mundo, dentro de las opciones para configurar la caja de texto esta encriptar los datos para que no se puedan visualizar, lo que nos ahorra unas lineas de código.

A continuación el código fuente :

import tkinter
from tkinter import *
tk = tkinter.Tk()

def verificar(): #esta función verifica que este correcto usuario y contraseña digitado por el usuario

a=usuario.get()#get es el metodo utilizado para capturar los datos de la caja de texto
b=contraseña.get()
if a=='hola' and b=='mundo':  #en esta linea se fija el usuario y la contraseña deseadas
top = tkinter.Tk()
frame2 = tkinter.Message(top, relief=RAISED, text='bien', width=5)
frame2.pack()
else:
top = tkinter.Tk()
frame3 = tkinter.Message(top, relief=RAISED, text='mal', width=5)
frame3.pack()



frame = tkinter.Frame(tk, relief=GROOVE, bd=2, height=100, width=300, bg='blue')
frame.pack(fill=BOTH,expand=20)
label = tkinter.Label(frame, font='Arial', bg='white', text="Usuario")
label.place(bordermode=OUTSIDE, height=20, width=100, y=10)
label2 = tkinter.Label(frame, font='Arial', bg='white', text="Contraseña")
label2.place(bordermode=OUTSIDE, height=20, width=100, y=40)
usuario=tkinter.Entry(frame, font='times')
usuario.place(bordermode=OUTSIDE, height=20, width=200, x=100, y=10)
contraseña=tkinter.Entry(frame, font='times', show='*') #se escoge encriptar con * la contraseña
contraseña.place(bordermode=OUTSIDE, height=20, width=200, x=100, y=40)
button0 = tkinter.Button(frame,text="Aceptar", command=verificar)
button0.place(bordermode=OUTSIDE, height=40, width=100, y=70)
button1 = tkinter.Button(frame,text="Cancelar", command=tk.destroy)#el método destroy cierra el frame
button1.place(bordermode=OUTSIDE, height=40, width=100, x=80, y=70)
tk.mainloop()

IMPRIMIR LO QUE HAY EN LOS BOTONES

Utilizaremos un label para imprimir los números correspondientes a cada botón, como tkinter es un modulo orientado a eventos, debemos definir unas funciones donde se programara el evento que sucede cuando se presiona o cambia de estado el botón.
A continuación se muestra como queda la interfaz de nuestra calculadora incluyendo el label:


Al presionar algún botón se imprime el valor en el label como se observa en la figura:

Se hizo click en el botón con el numero '6' y este se imprimió en el label, igual pasa con los otros botones.
Utilizando las herramientas que tiene el tkinter para configurar los widget, es posible manipular si el texto se justifica a derecha o izquierda, el tipo de letra, el color, el color del label, etc.

A continuacion se muestra el código fuente, les recuerdo que esta escrito y ejecutado en python 3 utilizando el modulo tkinter:


import tkinter
from tkinter import *
tk = tkinter.Tk()


a=StringVar()

def asignar1(): #estas funciones capturan e imprimen los numeros en el label
num1=1
a.set(1)
def asignar2():
num3=3
a.set(2)
def asignar3():
num3=3
a.set(3)
def asignar4():
num4=4
a.set(4)
def asignar5():
num5=5
a.set(5)
def asignar6():
num6=6
a.set(6)
def asignar7():
num7=7
a.set(7)
def asignar8():
num8=8
a.set(8)
def asignar9():
num9=9
a.set(9)
def asignar0():
num0=0
a.set(0)
frame = tkinter.Frame(tk, relief=GROOVE, bd=2, height=500, width=300, bg='blue')
frame.pack(fill=BOTH,expand=20)
label = tkinter.Label(frame, text="CALCULADORA", fg='yellow', font='Arial', bg='BLUE')
#label.pack(fill=X, expand=7)
label.place(bordermode=OUTSIDE, height=30, width=200, x=50)
label2 = tkinter.Label(frame, font='Arial', bg='white', textvariable=a) #en esta linea se puede configurar totalmente las caracteristicas del label
label2.place(bordermode=OUTSIDE, height=20, width=200, y=40)
button1 = tkinter.Button(frame,text="1", command=asignar1)
button2 = tkinter.Button(frame,text="2", command=asignar2)
button3 = tkinter.Button(frame,text="3", command=asignar3)
button4 = tkinter.Button(frame,text="4", command=asignar4)
button5 = tkinter.Button(frame,text="5", command=asignar5)
button6 = tkinter.Button(frame,text="6", command=asignar6)
button7 = tkinter.Button(frame,text="7", command=asignar7)
button8 = tkinter.Button(frame,text="8", command=asignar8)
button9 = tkinter.Button(frame,text="9", command=asignar9)
button0 = tkinter.Button(frame,text="0", command=asignar0)
button1.place(bordermode=OUTSIDE, height=40, width=40, y=70)
button2.place(bordermode=OUTSIDE, height=40, width=40, y=70, x=50)
button3.place(bordermode=OUTSIDE, height=40, width=40, y=70, x=100)
button4.place(bordermode=OUTSIDE, height=40, width=40, y=120)
button5.place(bordermode=OUTSIDE, height=40, width=40, y=120, x=50)
button6.place(bordermode=OUTSIDE, height=40, width=40, y=120, x=100)
button7.place(bordermode=OUTSIDE, height=40, width=40, y=170)
button8.place(bordermode=OUTSIDE, height=40, width=40, y=170, x=50)
button9.place(bordermode=OUTSIDE, height=40, width=40, y=170, x=100)
button0.place(bordermode=OUTSIDE, height=40, width=40, y=220, x=50)

tk.mainloop()


De esta manera ya podemos imprimir los números de nuestra calculadora

miércoles, 5 de octubre de 2011

MANEJO DE BOTONES Y LABEL EN TKINTER-PYTHON3

Comenzaremos con la generación de un frame (los denominados formularios en visual basic), con una serie de botones y un label, con el fin de iniciar el acercamiento al manejo de los widget de python


Como podemos observar generó un frame donde  se ubicaron varios botones y un titulo por medio de un label.
No es necesario ser un genio para adivinar que el primer proyecto que desarrollaremos es una calculadora. Les dejo el codigo fuente para que empiecen a probar.


CODIGO FUENTE

import tkinter
from tkinter.constants import *
tk = tkinter.Tk()


frame = tkinter.Frame(tk, relief=GROOVE, bd=2, height=500, width=300)
frame.pack(fill=BOTH,expand=20)
label = tkinter.Label(frame, text="CALCULADORA", fg='yellow', font='Arial', bg='BLUE')
#label.pack(fill=X, expand=7)
label.place(bordermode=OUTSIDE, height=30, width=200, x=50)
button1 = tkinter.Button(frame,text="1")
button2 = tkinter.Button(frame,text="2")
button3 = tkinter.Button(frame,text="3")
button4 = tkinter.Button(frame,text="4")
button5 = tkinter.Button(frame,text="5")
button6 = tkinter.Button(frame,text="6")
button7 = tkinter.Button(frame,text="7")
button8 = tkinter.Button(frame,text="8")
button9 = tkinter.Button(frame,text="9")
button0 = tkinter.Button(frame,text="0")
button1.place(bordermode=OUTSIDE, height=40, width=40, y=70)
button2.place(bordermode=OUTSIDE, height=40, width=40, y=70, x=50)
button3.place(bordermode=OUTSIDE, height=40, width=40, y=70, x=100)
button4.place(bordermode=OUTSIDE, height=40, width=40, y=120)
button5.place(bordermode=OUTSIDE, height=40, width=40, y=120, x=50)
button6.place(bordermode=OUTSIDE, height=40, width=40, y=120, x=100)
button7.place(bordermode=OUTSIDE, height=40, width=40, y=170)
button8.place(bordermode=OUTSIDE, height=40, width=40, y=170, x=50)
button9.place(bordermode=OUTSIDE, height=40, width=40, y=170, x=100)
button0.place(bordermode=OUTSIDE, height=40, width=40, y=220, x=50)
tk.mainloop()