什么是一些好的Python ORM解决方案?

我正在评估并考虑将CherryPy用于基本上来自客户端(浏览器)的JavaScript前端项目,该项目与后端的Python Web服务对话。 所以,我真的需要在后端使用Python来实现快速且轻量级的功能,然后通过ORM(浏览器的JSON)与PostgreSQL数据库对话。

我也看着我喜欢的Django,因为它的ORM是内置的。 不过,我认为Django可能比我真正需要的要多一点(即更多的功能比我真正需要的更慢==)。

任何人都有不同的Python ORM解决方案的经验,可以比较和对比他们的功能,速度,效率等。


SQLAlchemy功能更强大,功能更强大(使用DataMapper模式)。 Django ORM具有更清晰的语法,并且更易于编写(ActiveRecord模式)。 我不知道性能差异。

SQLAlchemy也有一个声明层,它隐藏了一些复杂性,并为它提供了一种类似于Django ORM的ActiveRecord风格的语法。

我不担心Django“太重了”。 它足够分离,您可以使用ORM,而无需导入其余部分。

也就是说,如果我已经将CherryPy用于Web层并且只需要一个ORM,那么我可能会选择SQLAlchemy。


如果你正在寻找轻量级的,并且已经熟悉django风格的声明模型,请查看peewee:https://github.com/coleifer/peewee

例:

import datetime
from 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 django
Entry.filter(blog__name='Some great blog')

# or programmatically for finer-grained control
Entry.select().join(Blog).where(Blog.name == 'Some awesome blog')

查看文档以获取更多示例。


Storm可以说是最简单的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 = foo
  store.add(thing)
  store.commit()

当你需要时,它可以轻松地下载到原始SQL中:

store.execute('UPDATE bars SET bar_name=? WHERE bar_id like ?', []) 
store.commit()
链接地址: http://www.djcxy.com/p/17187.html

上一篇: What are some good Python ORM solutions?

下一篇: SQLite and sub