Could it be even easy to create an abstraction layer that may accommodate relational and non-relational databases? The objective of this layer would be to minimize repetition and enables an internet application to make use of any type of database just by altering/modifying the code in one location (ie, the abstraction layer). The part that sits on the top from the abstraction layer mustn't be concerned if the underlying database is relational (SQL) or non-relational (NoSQL) or whatever new type of database that could emerge later later on.

There's a Summer of Code project happening now to add non-relational support to Django's ORM. It appears to become running smoothly and odds are good that it'll be merged into core prior to Django 1.3.

You could utilize stock Django and Django-nonrel ( ) together to obtain a quite unified experience. Some limits apply, read paperwork carefully though, recalling Spolsky's "All abstractions are leaking".

Years old could also check web2py, they support relational databases and GAE around the core.

Regarding Application Engine, all existing attempts limit you in some manner (web2py does not support transactions or namespaces and most likely a number of other stuff, for instance). If you are planning to utilize GAE, use what GAE provides and end up forgetting searching for a SQL-NoSQL ultimate goal. Existing solutions are inevitably limited and affect performance adversely.

Appreciate all of the solutions. In summary the solutions, presently only web2py and Django supports this type of abstraction.

It's not in regards to a SQL-NoSQL ultimate goal, using abstraction could make the applications more flexible. Allows think that you began a task using NoSQL, after which afterwards you have to switch to SQL. It's desirable that you simply only make changes towards the codes inside a couple of spots rather than everywhere. For many cases, it doesn't really matter whether you keep data inside a relational or non-relational db. For instance, storing user profiles, text content for dynamic page, or blog records. I understand there has to be a downside using the abstraction, but my real question is much more about the present solution or technical insight, rather than the effects.