| Mostly because it's a lot more powerful than Django's ORM. Just take a look at the documentation table of contents to get a vague idea: http://www.sqlalchemy.org/docs/ - The support for various class inheritance hierarchies is much more powerful than Django's inheritance. - You can customize the default JOINs between object relationships very easily. - You can map objects against arbitrary select statements. - It has supported multiple databases for a long time now (which only just got added in Django 1.2) - It supports composite primary keys. - It implements the unit of work pattern, so you can save entire object graphs without having to explicitly save each individual node. This is a lot more intuitive, IMO. - It uses an identity map to maintain object consistency. So if you query for the same object in two different queries, the same object is returned (at the Python level). - The docs are excellent. I think Django's ORM is fine for simple web apps where the model objects are just used to shuffle data in and out of the database. If you've got complex domain models, or specific database requirements, though, then you'll probably hit a wall where Django won't do what you need, whereas SQLAlchemy probably does. |