[python] 좋은 파이썬 ORM 솔루션은 무엇입니까? [닫은]

저는 기본적으로 백엔드의 Python 웹 서비스와 통신하는 클라이언트 측 (브라우저)의 JavaScript 프론트 엔드 프로젝트에 CherryPy를 사용하고 평가하고 있습니다. 따라서 백엔드에는 Python을 사용하여 구현 한 다음 ORM (JSON은 브라우저로)을 통해 PostgreSQL DB와 통신 할 수있는 빠르고 가벼운 것이 필요합니다.

ORM이 내장되어 있기 때문에 내가 좋아하는 Django 도보 고 있습니다. 그러나 Django가 실제로 필요한 것보다 조금 더 많을 수 있다고 생각합니다 (즉, 실제로 필요한 것보다 더 많은 기능 == 느림).

누구나 다른 Python ORM 솔루션에 대한 경험이 있으십니까? 기능과 속도, 효율성 등을 비교하고 대조 할 수 있습니까?



답변

SQLAlchemy는 기능이 더 강력하고 강력합니다 (DataMapper 패턴 사용). Django ORM은 구문이 더 깔끔하고 (ActiveRecord 패턴)을 작성하기가 더 쉽습니다. 성능 차이에 대해 모르겠습니다.

SQLAlchemy는 또한 약간의 복잡성을 숨기고 Django ORM과 더 유사한 ActiveRecord 스타일의 구문을 제공 하는 선언적 계층 을 가지고 있습니다.

Django가 “너무 무겁다”고 걱정하지 않습니다. 나머지를 가져 오지 않고 원하는 경우 ORM을 사용할 수있을 정도로 분리되었습니다 .

즉, 웹 계층에 이미 CherryPy를 사용하고 있고 ORM이 필요한 경우 SQLAlchemy를 선택했을 것입니다.


답변

경량을 찾고 있으며 장고 스타일 선언 모델에 이미 익숙한 경우 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()


답변

나는 보통 SQLAlchemy 사용 합니다. 꽤 강력하고 아마도 가장 성숙한 파이썬 ORM 일 것입니다.

CherryPy를 사용하려는 경우 Robert Brewer (현재 CherryPy 프로젝트 리더 인 사람)가 dejavu 를 살펴볼 수도 있습니다 . 나는 개인적으로 그것을 사용하지 않았지만 그것을 좋아하는 사람들을 알고 있습니다.

SQLObject 는 SQLAlchemy보다 ORM을 사용하는 것이 약간 쉽지만 강력하지는 않습니다.

개인적으로, Django에서 전체 프로젝트를 작성할 계획이 아니라면 Django ORM을 사용하지 않을 것입니다.


답변

0.5로 표준이 된 SQLAlchemy의 선언적 확장 기능은 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()


답변

우리는 SQLAlchemy와 함께 Elixir를 사용 했으며 지금까지 그것을 좋아했습니다. Elixir는 SQLAlchemy 위에 레이어를 배치하여 “ActiveRecord 패턴”카운터 파트처럼 보이게합니다.


답변

이것은 파이썬에서 높은 수준의 데이터베이스 상호 작용을위한 표준 참조 지점 인 것 같습니다 :
http://wiki.python.org/moin/HigherLevelDatabaseProgramming

거기에서 Dejavu 는 Martin Fowler의 DataMapper 패턴을 파이썬에서 상당히 추상적으로 구현 하는 것처럼 보입니다 .