viernes, 2 de diciembre de 2011

SENTENCIAS MySQL EJECUTADAS DESDE PYTHON 3

Hasta el momento hemos conocido la manera en que se debe realizar la conexión las bases de datos desde python 3, específicamente con el motor MySQL, adicionalmente hemos realizado una aplicación que puede agregar datos a la base de datos ingresando desde el teclado.

Ahora mostraré una aplicación utilizando un menú para escribir en la BD, modificar la BD, realizar consultas en la BD y borrar datos específicos de la BD.  La aplicación es bastante simple, sin embargo creo que es lo suficientemente clara para entender como se manipulan las sentencias sql desde python3 y con un poco de trabajo sera muy fácil llevar a cabo cualquier tipo de consulta en la BD.

Inicialmente mostrare como funciona la aplicación y posteriormente dejare el código para que no existan dudas sobre la manipulación de las sentencias. A continuación observamos el menú de la aplicación:



Como se observa existen 4 opciones que de manera general corresponde a las posibilidades que tenemos de manipular una base de datos con sentencias SQL. A continuación realizaremos una consulta a la tabla nombre de la base de datos pruebapython que hemos venido trabajando desde el inicio, aclaro que para facilidad y simplicidad de la aplicación se programo una consulta general de la tabla por lo que mostrará todos los datos presentes en la tabla



como observamos están los siguientes datos en la tabla: jorge, virginia, diego, andres ,fabian y juan. Aclaro que solamente esta programada la consulta pero con una manipulación básica de las lista podemos imprimir en la pantalla la información de una mejor manera.

Seleccionando la opción 1 podemos escribir un nuevo dato en la tabla, en este caso se escribirá el nombre eduardo tal como se observa:



Con la opción 2 podemos modificar un registro que ya esta escrito y que por algún motivo debe ser cambiado. En este caso modificaremos el registro llamado fabian y lo cambiaremos por julio



Por ultimo con la opción 4 podemos borrar un registro especifico sin necesidad de perder valiosa información y tener que rehacer la tabla.



Como se puede observar borramos el registro que escribimos inicialmente 'eduardo'
A continuación incluyo el código utilizado:

import os, pyodbc

conectstring='DRIVER={MySQL ODBC 5.1 Driver}; SERVER=localhost; DATABASE=pruebapython; USER=root; PASSWORD=kanivales;'
cnxn=pyodbc.connect(conectstring)  
cursor=cnxn.cursor()

print('MENU BASE DE DATOS\n')
print('1. Agregar dato\n2. Modificar dato\n3. Consulta\n4. borrar\n\n')
opc=input('ESCOJA LA OPCION:')

if opc=='1':
os.system('cls')
dat=input('ingrese dato:')
sql='INSERT INTO nombre VALUES ("'+dat+'")'
cursor.execute(sql)  
cnxn.commit()
print('El registro fue agregado')
input()
elif opc=='2':
os.system('cls')
dat=input('ingrese dato a modificar:')
dat2=input('ingrese nuevo dato:')
sql='UPDATE nombre SET nom="'+dat2+'" WHERE nom="'+dat+'"'
cursor.execute(sql)  
cnxn.commit()
print('El registro fue cambiado')
input()
elif opc=='3':
os.system('cls')
sql='SELECT * FROM nombre'
cursor.execute(sql)  
cnxn.commit()
result=cursor.fetchall()
print(result)
input()
elif opc=='4':
os.system('cls')
dat=input('ingrese dato a borrar:')
sql='DELETE FROM nombre where nom="'+dat+'"'
cursor.execute(sql)  
cnxn.commit()
print('El dato fue borrado')
input()
else:
print('la opcion no es correcta')
input()

De esta manera finalizamos el estudio de las posibilidades que nos da python 3 de conectarnos con motores de bases de datos de cualquier proveedor. SUERTE!!!



jueves, 1 de diciembre de 2011

Insertar datos PYTHON - MYSQL

Presento excusas ya que hace rato no actualizaba el blog por falta de  tiempo pero aprovechemos y entremos nuevamente en materia.

A continuación mostrare un pequeño programa donde se inserta datos en una tabla de mysql, la diferencia con la anterior aplicación que habíamos realizado es que se adjuntara a la tabla un dato ingresado desde le teclado por el usuario.

Aquí observamos los datos actuales que hay en nuestra tabla pruebapython que en post anteriores habíamos trabajado:
Ahora desde la aplicacion en python 3 ingresamos el nombre 'rogelio':

y ahora observamos que en nuestra tabla mysql ya existe el nombre:
De esta manera podemos ingresar a la base de datos  información desde el teclado, a continuación el código utilizado:


import pyodbc  #libreria del modulo utilizado

conectstring='DRIVER={MySQL ODBC 5.1 Driver}; SERVER=localhost; DATABASE=pruebapython; USER=root; PASSWORD=kanivales;'
#se untiliza una cadena de caracteres que contiene informacion de conexion con servidor y base de datos
cnxn=pyodbc.connect(conectstring)  #se establece conexion
cursor=cnxn.cursor() #se crea cursor
cad =input("Ingrese nombre: ") #se captura dato desde teclado
sql='INSERT INTO nombre VALUES ("'+cad+'")' #sentencia sql
cursor.execute(sql)  #se ejecuta la sentencia sql
cnxn.commit() #se efectua cambio sobre la base de datos
cnxn.close() #se cierra conexion

input()

Como pueden observar es un código simple y bastante fácil de entender, para finalizar esta temática desarrollaremos una aplicación que pueda crear, escribir, modificar y leer la base de datos hasta la próxima!!

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()