سؤال

أنا وتقييم تبحث في استخدام CherryPy لمشروع الأساس جافا سكريبت الأمامية من جانب العميل (المستعرض) أن المحادثات الثعبان خدمة ويب على النهاية الخلفية.أنا حقا بحاجة الى شيء سريع و خفيف على الخلفية التي لا يمكن تنفيذها باستخدام بيثون ثم يتحدث كيو DB عبر ORM (JSON إلى المتصفح).

أنا أيضا أبحث في جانغو ، الذي أحبه منذ ORM هو المدمج في.ومع ذلك, أعتقد جانغو قد يكون أكثر قليلا مما كنت حقا بحاجة (أيميزات أكثر من أحتاج == أبطأ؟).

أي شخص لديه أي خبرة مع مختلف الثعبان ORM الحلول التي يمكن أن قارن وعلى النقيض من الميزات والوظائف ، السرعة ، الكفاءة ، وما إلى ذلك ؟

هل كانت مفيدة؟

المحلول

SQLAlchemy أكثر كامل المواصفات قوية (يستخدم DataMapper نمط).جانغو ORM وقد نظافة الجملة و هو أسهل في الكتابة عن (ActiveRecord نمط).أنا لا أعرف عن الاختلافات الأداء.

SQLAlchemy أيضا التعريفي طبقة أن يخفي بعض التعقيد و يعطيها ActiveRecord-أسلوب الجملة أكثر مماثلة إلى جانغو ORM.

أنا لا أقلق حول جانغو أن تكون "ثقيلة جدا". انها تنفصل بما فيه الكفاية التي يمكنك استخدامها ORM إذا كنت تريد دون الحاجة إلى استيراد بقية.

أنه قال: لو كنت بالفعل باستخدام CherryPy ويب طبقة اريد ORM, ربما تختار SQLAlchemy.

نصائح أخرى

إذا كنت تبحث عن خفيفة الوزن و هم بالفعل على دراية جانغو-النمط التعريفي نماذج التحقق من وجودها: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')

التحقق مستندات لمزيد من الأمثلة.

العاصفة ويمكن القول إن أبسط 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 ، قد تنظر أيضا في dejavu كما انها روبرت بريور (الرجل الذي الحالية CherryPy رئيس المشروع).أنا شخصيا لم تستخدم, ولكن أنا لا أعرف أن بعض الناس يحبون ذلك.

SQLObject هو أسهل قليلا إلى استخدام ORM من SQLAlchemy, لكنه ليس قويا.

انا شخصيا لا استخدم جانغو ORM إلا إذا كنت تخطط على كتابة المشروع بأكمله في جانغو, ولكن هذا مجرد لي.

SQLAlchemy هو التعريفي التمديد التي أصبحت قياسية في 0.5, يوفر كل واحد في واجهة كثيرا مثل Django أو العاصفة.كما أنه يدمج بسلاسة مع الطبقات/الموائد تكوين باستخدام 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 و لم يرضوا حتى الآن.إكسير يضع طبقة على رأس SQLAlchemy أن يجعلها تبدو أكثر مثل "ActiveRecord نمط" مكافحة أجزاء.

ويبدو أن الكنسي مرجع رفيع المستوى في قاعدة بيانات التفاعل في بايثون:http://wiki.python.org/moin/HigherLevelDatabaseProgramming

من هناك, يبدو Dejavu تنفذ مارتن فاولر DataMapper إلى حد ما نمط تجريدي في بيثون.

أعتقد أنك قد تبدو في:

الخريف

العاصفة

لا يوجد طريقة يمكن تصورها أن الميزات غير المستخدمة في جينجو سوف تعطي أداء عقوبة.قد تأتي فقط في متناول اليدين إذا كنت من أي وقت مضى تقرر الراقي المشروع.

SQLAlchemy جدا وقوية جدا.ومع ذلك فإنه ليس من الآمن موضوع تأكد من الحفاظ على ذلك في الاعتبار عند العمل مع cherrypy في موضوع وضع حوض السباحة.

اعتدت العاصفة + سكليتي لمشروع صغير و كنت سعيدة جدا معها حتى أضفت المعالجة المتعددة.محاولة استخدام قاعدة البيانات من عدة عمليات أسفرت عن "قاعدة البيانات هو مؤمن" استثناء.أنا تحولت إلى SQLAlchemy و نفس الكود يعمل مع أية مشاكل.

أود أن تحقق SQLAlchemy

انها حقا سهلة الاستخدام و نماذج العمل مع ليست سيئة على الإطلاق. جانغو يستخدم 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')>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top