lunes, 19 de septiembre de 2011

Conexión con MySql

Bueno, este articulo minimalista muestra como hacer una conexión a MySql, desde Python 3.

La libreria a usar es PyMySQL, la cual es un cliente escrito en Python, la meta de esta libreria es reemplazar a MySQLdb y poder trabajar con las diferentes implementaciones de Python (CPython 2.3+, Jython, IronPython, PyPy and Python 3).

Actualmente soporta Python 2.4+, Python 3 y MySql 4.1+.

Mi entorno de pruebas esta en Debian Squeeze, Python 3, Eric IDE.

Para poder empezar a trabajar debemos descargar la libreria del enlace . (Se asume que ya esta instaldo Python 3 y MySql). Después de descargar y descomprimir la libreria la instalamos:


Para Debian:

python3 setup.py install

con privilegios de administrador.


Para Windows:

Entrar a la carpeta que se acaba de descomprimir y luego ejectuar:


C:\Users\Jurasec\Downloads\PyMySQL3-0.4\PyMySQL3-0.4\c:\Python32\python.exe setup.py install
running install
running build
running build_py
running install_lib
creating c:\Python32\Lib\site-packages\pymysql
copying build\lib\pymysql\charset.py
c:\Python32\Lib\site-packages\pymysql
copying build\lib\pymysql\connections.py
c:\Python32\Lib\site-packages\pymysql
creating c:\Python32\Lib\site-packages\pymysql\constants
copying build\lib\pymysql\constants\CLIENT.py -> c:\Python32\Lib\site-packages\pymysql\constants
copying build\lib\pymysql\constants\COMMAND.py -> c:\Python32\Lib\site-packages\pymysql\constants

Para probar si quedo bien la instalación, abrimos el shell de Python, (el cual se ha instaldo junto con Python), y probamos importar la libreria nueva:


Ahora sí, ya vimos que esta todo correcto, por lo tanto podemos hacer nuestro script para obtener algunos datos de prueba desde el gestor:
#!/usr/bin/env python

import pymysql

#conn = pymysql.connect(host='127.0.0.1', unix_socket='/tmp/mysql.sock', user='root', passwd=None, db='mysql')

conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='mysql', db='test')
cur = conn.cursor()
cur.execute("SELECT * FROM estados")
print (cur.description) 
#r = cur.fetchall()
#print (r)
for r in cur.fetchall():
   print ("Id: {0}, Estado: {1}".format(r[0], r[1]))
cur.close()
conn.close()

Como yo estoy usando eric4, pues solo voy a iniciar > Ejecutar scprit... , y el resultado es:

Al parecer no se necesita de mucho esfuerzo para ya poder empezar a trabar con este gestor. Si algo no quedo claro, podemos comentarlo.

2 comentarios:

hola:
al realizar la conexion anda perfecto, el inconveniente que encuentro es al generar una consulta con el execute, paso a pegarte el error, te da alguna idea de que puede ser?


cur.execute('select * from rubros')
Traceback (most recent call last):
File "", line 1, in
cur.execute('select * from rubros')
File "C:\Python32\lib\site-packages\pymysql\cursors.py", line 108, in execute
self.errorhandler(self, exc, value)
File "C:\Python32\lib\site-packages\pymysql\connections.py", line 182, in defaulterrorhandler
raise Error(errorclass, errorvalue)
pymysql.err.Error: (, AssertionError('Result length not requested length:\nExpected=1. Actual=0. Position: 25. Data Length: 25',))
utilizo Win7, python 3.2.2 y mysql 6.03

Saludos

Según veo es un bug, pero que ya fue corregido, que versión de la libreria descargaste?

https://github.com/petehunt/PyMySQL/issues/43

Publicar un comentario

Twitter Delicious Facebook Digg Stumbleupon Favorites More