Diferencias entre MySQL y PostgreSQL al usar SQLAlchemy
19 de Octubre 2006 1:13 PM porHe 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.
- 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)
-
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. - Seguramente hay otras diferencias, pero hasta ahora estas son las que he encontrado.
Por supuesto, si conoces otras compartelas con nosotros.










