当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《什么是一些优秀的PythonORM解决方案?》经验,为你挑选了6个好方法。

我正在评估并考虑使用CherryPy进行一个项目,该项目基本上是来自客户端(浏览器)的JavaScript前端,后端与后端的Python Web服务对话.所以,我真的需要在后端快速轻量级的东西,我可以用Python实现,然后通过ORM(浏览器的JSON)与PostgreSQL DB对话.

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

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



1> coleifer..:

如果您正在寻找轻量级并且已经熟悉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')

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



2> Carl Meyer..:

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

SQLAlchemy还有一个声明层,它隐藏了一些复杂性,并为它提供了一个类似于Django ORM的ActiveRecord样式语法.

我不担心Django"太重了".它已经足够分离,你可以使用ORM,而不必导入其余的东西.

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


是的,但与问题无关,这只是选择Python ORM; 不是关于自动生成的管理界面或其他框架组件.
但是如果你不喜欢Django的ORM,并且想要使用SA,那么你会失去许多django的功能,比如admin.不是交易破坏者,而是皮肤膝盖.
我认为SQLAlchemy不是轻量级的 - 它可以非常快.我会把我的项目放在混合物中,它被称为peewee,它与postgres交谈.刚刚加入了对django式查询的支持!http://charlesleifer.com/docs/peewee/
另请注意,Django ORM不支持复合主键,SQLAlchemy支持它.

3> 小智..:

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()


它也支持SQLite,如上例所示
暴风雨是无法维持的.我不会将它用于新项目.
而且,似乎没有针对Python 3的Storm
quick_orm就像Storm一样简单,它建立在SQLAlchemy之上,因此它也非常强大:http://pypi.python.org/pypi/quick_orm.免责声明:我是quick_orm的作者

4> Jason Baker..:

我通常使用SQLAlchemy.它非常强大,可能是最成熟的python ORM.

如果你打算使用CherryPy,你也可以看看dejavu,因为它是Robert Brewer(当前CherryPy项目负责人).我个人没有用它,但我确实知道有些人喜欢它.

SQLObject比SQLAlchemy更容易使用ORM,但它不是那么强大.

就个人而言,除非我计划在Django中编写整个项目,否则我不会使用Django ORM,但那只是我.



5> zzzeek..:

SQLAlchemy的声明性扩展,在0.5中成为标准扩展,提供了一个非常像Django或Storm的一体化界面.它还与使用datamapper样式配置的类/表无缝集成:

Base = declarative_base()

class Foo(Base):
    __tablename__ = 'foos'
    id = Column(Integer, primary_key=True)

class Thing(Base):
    __tablename__ = 'things'

    id = Column(Integer, primary_key=True)
    name = Column(Unicode)
    description = Column(Unicode)
    foo_id = Column(Integer, ForeignKey('foos.id'))
    foo = relation(Foo)

engine = create_engine('sqlite://')

Base.metadata.create_all(engine)  # issues DDL to create tables

session = sessionmaker(bind=engine)()

foo = Foo()
session.add(foo)
thing = Thing(name='thing1', description='some thing')
thing.foo = foo  # also adds Thing to session
session.commit()


:)在Tyler告诉SQLAlchemy的创建者他应该使用Quick ORM.
:)让我想起几年前有人在usenet与dmr @ alice争论说他并不真正理解C.

6> airportyh..:

我们使用Elixir和SQLAlchemy,并且到目前为止一直喜欢它.Elixir在SQLAlchemy上放置了一个层,使其看起来更像是"ActiveRecord模式"计数器部分.


SQLAlchemy支持开箱即用的OOP和函数样式,Elixir在其上添加了声明性编程风格(主要用于模型声明,但可以扩展).
推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有