What are some good Python ORM solutions? [closed] What are some good Python ORM solutions? [closed] python python

What are some good Python ORM solutions? [closed]


If you're looking for lightweight and are already familiar with django-style declarative models, check out peewee: https://github.com/coleifer/peewee

Example:

import datetimefrom peewee import *class Blog(Model):    name = CharField()class Entry(Model):    blog = ForeignKeyField(Blog)    title = CharField()    body = TextField()    pub_date = DateTimeField(default=datetime.datetime.now)# query it like djangoEntry.filter(blog__name='Some great blog')# or programmatically for finer-grained controlEntry.select().join(Blog).where(Blog.name == 'Some awesome blog')

Check the docs for more examples.


SQLAlchemy is more full-featured and powerful (uses the DataMapper pattern). Django ORM has a cleaner syntax and is easier to write for (ActiveRecord pattern). I don't know about performance differences.

SQLAlchemy also has a declarative layer that hides some complexity and gives it a ActiveRecord-style syntax more similar to the Django ORM.

I wouldn't worry about Django being "too heavy." It's decoupled enough that you can use the ORM if you want without having to import the rest.

That said, if I were already using CherryPy for the web layer and just needed an ORM, I'd probably opt for SQLAlchemy.


Storm has arguably the simplest API:

from storm.locals import *class Foo:    __storm_table__ = 'foos'    id = Int(primary=True)class Thing:    __storm_table__ = 'things'    id = Int(primary=True)    name = Unicode()    description = Unicode()    foo_id = Int()    foo = Reference(foo_id, Foo.id)db = create_database('sqlite:')store = Store(db)foo = Foo()store.add(foo)thing = Thing()thing.foo = foostore.add(thing)store.commit()

And it makes it painless to drop down into raw SQL when you need to:

store.execute('UPDATE bars SET bar_name=? WHERE bar_id like ?', []) store.commit()