我正在评估并考虑将CherryPy用于一个项目,该项目基本上是一个从客户端(浏览器)到后端与Python web服务对话的JavaScript前端。所以,我真的需要一些快速和轻量级的在后端,我可以使用Python实现,然后通过ORM (JSON到浏览器)与PostgreSQL DB对话。

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

谁有使用不同的Python ORM解决方案的经验,可以比较和对比它们的特性和功能、速度、效率等?


当前回答

如果你正在寻找轻量级的,并且已经熟悉django风格的声明式模型,请查看pewee: 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')

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

其他回答

Django中未使用的特性不可能带来性能损失。如果你想要升级这个项目,也许就会派上用场。

这似乎是Python中高级数据库交互的标准参考点: http://wiki.python.org/moin/HigherLevelDatabaseProgramming

由此看来,Dejavu在Python中相当抽象地实现了Martin Fowler的DataMapper模式。

我想你可以看看:

秋天

风暴

我会检查SQLAlchemy

它真的很容易使用,你所使用的模型一点也不差。Django使用SQLAlchemy作为ORM,但是单独使用它可以让你充分利用它的功能。

下面是一个关于创建和选择orm对象的小例子

>>> ed_user = User('ed', 'Ed Jones', 'edspassword')
>>> session.add(ed_user)
>>> our_user = session.query(User).filter_by(name='ed').first() 
>>> our_user
    <User('ed','Ed Jones', 'edspassword')>

如果你正在寻找轻量级的,并且已经熟悉django风格的声明式模型,请查看pewee: 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')

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