sábado, 28 de abril de 2018

pymysql – Controlador de base de datos MySQL

pymysql es un paquete para la interacción con bases de datos MySQL escrito completamente en Python, a diferencia de su principal “competidor”, MySQLdb. Se presenta como una atractiva alternativa a este último y con razón, pues las ventajas son bastante relevantes. Corre en distintas implementaciones de Python: CPython, PyPy y IronPython. Además, su instalación resulta más sencilla al prescindir de código escrito en C. Por último, y de las que más aprecio personalmente, soporte para el conjunto de versiones 3.x.

Descarga e instalación

Si cuentas con pip en tu ordenador, el proceso será de lo más sencillo. Ejecutar en la terminal:
pip install PyMySQL
Como alternativa, puedes descargar el código de fuente desde PyPI o bien desde el proyecto en GitHub. Una vez descomprimido el archivo, situarse en la carpeta recientemente creada y ejecutar:
python setup.py install

Ejemplos

Como la mayoría de los módulos para controlar un motor de base de datos, pymysql está basado en la DB-API; por lo tanto, usuarios con experiencia en otros paquetes (sqlite3, MySQLdb, por ejemplo) ya estarán familiarizados con la librería.
Establecer una conexión.
  1. import pymysql
  2. conn = pymysql.connect(
  3. host="localhost", port=3306, user="python",
  4. passwd="python1", db="recursospython"
  5. )
Dirección del servidor (puerto e IP, host y port), datos de autenticación (usuario y contraseña, user y passwd) y nombre de la base de datos (db), que resulta equivalente a una futura ejecución de la consulta USE nombre_base_de_datos;. Para evitar problemas con caracteres especiales, siempre opto por indicar la codificación, añadiendo el parámetro charset.
charset="utf8"
 
Procedo a la creación de un cursor y ejecución de algunas consultas.
  1. cursor = conn.cursor()
  2. cursor.execute(
  3. "SELECT nombre, apellido FROM clientes"
  4. )
  5. for nombre, apellido in cursor.fetchall():
  6. print("{0} {1}".format(nombre, apellido))
La función fetchall retorna una lista con el conjunto de filas retornadas por la última consulta ejecutada. Por el contrario, fetchone() retorna el primer valor.
Por último, inserto datos en la tabla, guardo los cambios y cierro la conexión.
  1. # Utilizo %s para integrar objetos en la consulta y prevenir inyecciones SQL.
  2. cursor.execute(
  3. "INSERT INTO clientes VALUES (%s, %s)",
  4. ("Recursos", "Python")
  5. )
  6. # Guardar cambios.
  7. conn.commit()
  8. conn.close()
Es posible cerrar el cursor una vez que ha sido utilizado.

PIP

Como en los sistemas operativos anteriores, la manera más fácil de instalar pip es utilizando el programa de Python llamado get-pip.py, que puedes descargar aquí. Cuando abres este enlace te puede asustar el revoltijo horrible que te espera. Por favor, no te espantes. Solamente usa tu navegador para guardar esta página con su nombre por defecto, que es get-pip.py. Guarda el archivo en tu directorio de Python para que sepas dónde encontrarlo.
Una vez guardes el archivo, necesitas ejecutarlo, lo cual puedes hacer de dos maneras. Si prefieres utilizar tu intérprete de Python, solamente haz click con el botón derecho sobre el archivo get-pip.py y selecciona “abrir con” y luego selecciona el intérprete de Python que suelas utilizar.
Si prefieres instalar pip utilizando la terminal de línea de comandos, navega al directorio en el que pusiste Python y obtén get-pip.py. Para este ejemplo asumimos el directorio python27, así que usa el comando C:\>cd python27. Una vez que estés en este directorio, ejecuta el comando:
python get-pip.py to install pip

miércoles, 18 de abril de 2018

Ejemplo de Macros

imprime macro numero  ;Nuestra macro se llama imprimir, nuestro parámetro es numero
  mov ah,02h
  mov dl,numero  ;Indica que mueva al registro DL lo que pasamos como parámetro.
  add dl,30h  ;suma 30h para imprimir el número real.
  int 21h
endm

lup macro 
    mov num,cl
    imprime num ;Llamamos al macro con el valor de nuestra variable.
    loop inicio ;repite ciclo
endm

Fin macro
    mov ah,04ch ;Finaliza el programa.
    int 21h
    endm

.model small
.stack 64
.data
  num db 0  ;declaramos nuestra variable.
.code
  mov cx,9
inicio:
   
    lup
   
  Fin
end