2010-03-31 12 views

Respuesta

15

No utilizar en lugar de SQLAlchemy MySQLdb-SQLAlchemy utiliza para tener acceso a algo así como MySQLdb, oursql (otro conductor MySQL que he oído es más agradable y tiene un mejor rendimiento), el módulo del sqlite3, psycopg2, o cualquier otro controlador de base de datos Tu estas usando.

Un ORM (como SQLAlchemy) ayuda a abstraer los detalles de la base de datos que está utilizando. Esto le permite mantenerse alejado de los detalles del sistema de base de datos que está utilizando, evitando la posibilidad de errores algunas veces (e introduciendo la posibilidad de otros), y haciendo que la transferencia sea trivial (al menos en teoría).

+0

SQLAlchemy afirma que consta de un __Core__ y un __ORM__. ¿Debo instalar MySQLdb para poder hacer interfaz con Python y MySQL? No sé nada, pero de la manera que lo entiendo, SQLAlchemy __Core__ puede reemplazar MySQLdb. ¿Está bien? http://www.sqlalchemy.org/features.html – Kit

+1

@Kit, no SQLAlchemy Core no reemplaza el adaptador de base de datos DBAPI2 real como MySQLdb. SQLAlchemy Core en realidad no se comunica con su base de datos. Necesita instalar MySQLdb (o, preferiblemente, oursql) para comunicarse con MySQL. –

9

Portabilidad más fácil entre diferentes motores de DB (supongamos que mañana decide que desea pasar a sqlite, o PostgreSQL, o ...), y mayor nivel de abstracción (y, por lo tanto, mayor productividad).

Esas son algunas de las buenas razones. También hay algunas malas razones para usar un ORM, como no querer aprender SQL, pero sospecho que SQLAlchemy en particular no es realmente favorecido por las personas por tan malas razones para querer un ORM en lugar de SQL desnudo ;-).

+0

Más o menos la misma razón para usar Active Record en Ruby o doctrina en PHP (o cualquier otro ORM realmente ...) – SeanJA

+0

MySQLdb no tiene soporte Unicode en el momento (se apagó después de algunos errores relacionados con Unicode fueron descubiertos). SQLAlchemy abstrae aquellas llamadas de codificación/decodificación que debe realizar manualmente sin usarlo. – Yaroslav

+0

"o cualquier otro orm realmente ..." Bueno, no tenía ni idea de que existían ORM o lo que eran antes de hoy. –

3

Además de lo que dijo Alex ...

  1. "no querer aprender SQL" es probablemente una mala cosa, sin embargo, si quieres que la gente más no técnicos involucrados como parte de la proceso de desarrollo, los ORM hacen un muy buen trabajo porque reduce este nivel de complejidad a un nivel inferior. Uno de los elementos que ha hecho exitoso a Django es su capacidad para permitir que los "periodistas periodísticos" mantengan un sitio web, en lugar de ingenieros de software.

  2. una de las limitaciones de los ORM es que no son tan escalables como el uso de SQL sin formato. en un trabajo anterior, queríamos deshacernos de una gran cantidad de generación de SQL manual y cambiar a un ORM para facilitar el uso (SQLAlchemy, Elixir, etc.), pero meses después, terminé escribiendo SQL en bruto de nuevo para evitar las consultas ineficientes o de alta latencia generadas por el sistema ORM.

+1

Re: reason 2, parte de lo que hace que SA sea tan agradable en particular, es que es trivial pegar sql en bruto en cualquier lugar que desee: engine.execute ("MY RAW SQL STRING;") –