Каков некоторый хороший Python решения ORM? [закрытый]

Другое событие NullPointerException возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.

String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals для гарантированного непустого объекта.

Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null.

Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.

String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

201
задан the Tin Man 8 December 2014 в 13:24
поделиться

9 ответов

SQLAlchemy более полнофункционален и мощен (использует шаблон DataMapper). Django ORM имеет более чистый синтаксис и легче записать для (шаблон ActiveRecord). Я не знаю о различиях в производительности.

SQLAlchemy также имеет декларативный уровень , который скрывает некоторую сложность и дает ей синтаксис ActiveRecord-стиля, более подобный Django ORM.

я не волновался бы о Django, являющемся "слишком тяжелым". Это разъединилось достаточно, что можно использовать ORM, если Вы хотите, не имея необходимость импортировать остальных.

Однако если бы я уже использовал CherryPy для веб-слоя и просто нуждался в ORM, я, вероятно, выбрал бы SQLAlchemy.

91
ответ дан Parham 23 November 2019 в 05:04
поделиться

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()
80
ответ дан jbatista 23 November 2019 в 05:04
поделиться

Я обычно использую SQLAlchemy. Это довольно мощно и является, вероятно, самым зрелым Python ORM.

, Если Вы - планирование использования CherryPy, Вы могли бы также изучить dejavu, как это Robert Brewer (парень, который является текущим руководителем проекта CherryPy). Я лично не использовал его, но я действительно знаю некоторых людей, которые любят его.

SQLObject немного легче использовать ORM, чем SQLAlchemy, но это не совсем как мощное.

Лично, я не использовал бы Django ORM, если я не был планированием записи всего проекта в Django, но это - просто я.

27
ответ дан Jason Baker 23 November 2019 в 05:04
поделиться

SQLAlchemy's описание расширение, которое становится стандартным в 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()
17
ответ дан endolith 23 November 2019 в 05:04
поделиться

Мы используем Elixir вместе с SQLAlchemy и любили его до сих пор. Elixir помещает слой сверху SQLAlchemy, который заставляет ее больше походить на "части счетчика" шаблона ActiveRecord.

9
ответ дан airportyh 23 November 2019 в 05:04
поделиться

Я думаю, что Вы могли бы посмотреть на:

Осень

Storm

1
ответ дан Lukas Šalkauskas 23 November 2019 в 05:04
поделиться

Нет никакого мыслимого способа, которым неиспользованные функции в Django дадут потерю производительности. Мог бы просто пригодиться, если Вы когда-нибудь решаете увеличить масштаб проект.

1
ответ дан Carl Meyer 23 November 2019 в 05:04
поделиться

Я проверил бы 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')>
-7
ответ дан Robert 23 November 2019 в 05:04
поделиться

SQLAlchemy очень, очень мощный. Однако она не является потокобезопасной, поэтому помните об этом при работе с cherrypy в режиме thread-pool.

-1
ответ дан 23 November 2019 в 05:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: