python - ترجمة - معنى كلمة عنوان بالانجليزي




ما هي بعض حلول Python ORM الجيدة؟ (8)

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

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

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

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


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

يحتوي SQLAlchemy أيضاً على طبقة تعريفية يخفي بعض التعقيد ويعطيه بناء جملة نمط ActiveRecord أكثر تشابهًا لـ ORM 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')

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


كنت تحقق من SQLAlchemy

إنه حقًا سهل الاستخدام والنماذج التي تعمل بها ليست سيئة على الإطلاق. يستخدم Django SQLAlchemy لـ 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')>

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


نستخدم Elixir جنبا إلى جنب مع SQLAlchemy وقد أحببت ذلك حتى الآن. يضع Elixir طبقة فوق SQLAlchemy تجعلها تبدو أشبه بأجزاء العداد "نمط ActiveRecord".



يمكن القول إن نظام Storm هو أبسط واجهة برمجة التطبيقات:

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




orm