Suscríbete a este blog
  • Acerca de...

    Este es un blog personal. Simplemente me deje llevar por las corrientes de la historia y he separado los temas de los que me gusta escribir. Como se dice, segmenté mis temas. Aún así, los artículos mas antigüos están en este blog.

    También hay una pestañita de contacto y una lista de los servicios con los que puedo ayudarte. Si quieres un blog como este, avísame.

    Redes Sociales

    Blogroll

    • Próximamente

    Admin

    ¡Suscríbete!

  • Categorías

  • Archivos

  • Comentarios Recientes

  • Diferencias entre MySQL y PostgreSQL al usar SQLAlchemy

    19 de Octubre 2006 1:13 PM por Sanchez Toledano

    He tenido algunos probleas con SQLAlchemy, porque resulta que para que sea realmente compatible con todas las posibles bases de datos, debes de tomar en cuenta las particularidades de cada Base de Datos.

    Por ejemplo, recordamos que usamos una combinación de mayúsculas y minúsculas para nombrar a las tablas o las columnas; por ejemplo, usamos tblEquipo y txtBien para indicar que una tabla se guarda datos de los equipos y txtBien es un campo que almacena datos sobre Bienes de tipo texto.

    También hay que considerar la forma en como se manejan las secuencias, es decir, datos que numéricos que se actualizan cada vez que se inserta un registro. Estos pueden establecerse manualmente o puedes dejar que SQLAlchemy los configure, ya que su configuración es diferente en cada base de datos.

    Vamos a ver las particularidades que he encontrado hasta ahora y que afectan directamente a nuestro proyecto.

    1. La primera se refiere a los nombres de tablas y de columnas. En PostgreSQL podemos usar nombres compuestos tblNombre y colNombre, ya sea cuando definimos la clase, cuando usamos autoload o SqlSoup, por ejemplo.  Pero no ocurre lo mismo con MySQL que solo respeta las mayúsculas cuando defines la clase, no cuando la cargas con autoload. Como consecuencia para poder usar la misma definición en cualquiera de estas dos bases de datos, debes defirla en minúsculas. 

      Veamos como definir la conexión para asegurar que las mayusculas se detecten correctamente.

      Para MySQL

      my_db = sql.create_engine('mysql://usuario:password@localhost/macInv', quote_schema=True, case_sensitive=True, convert_unicode=True, encoding='utf-8')
      metadata = sql.BoundMetaData(my_db, quote=True)

      tblUbicacion = sql.Table ('tbl_ubicacion', metadata, quoted=True, autoload = True, case_sensitive = True)

      Para PostgreSQL

      pg_db = sql.create_engine('postgres://usuario:password@localhost/mac', quote_schema=True, case_sensitive=True, convert_unicode=True,encoding='utf-8')
      metadata = sql.BoundMetaData(pg_db, quote=True)

      tblUbicacion = sql.Table ('tblUbicacion', metadata, quoted=True, autoload = True, case_sensitive = True)
    2. También es importante mencionar que si dejamos que SQLAlchemy maneje las secuencias, funciona mejor que al definir la secuencia manualmente. Ya que la definición de una secuencia depende integramente del motor de la base de datos, es mejor que SQLAlchemy elija la mejor. 
      Asi tenemos que mientras que en MySQL se agrega la opción autoincrement a la definición de una columna, en PostgreSQL se crea un sequence.

    3. Seguramente hay otras diferencias, pero hasta ahora estas son las que he encontrado.
      Por supuesto, si conoces otras compartelas con nosotros.