SQLAlchemy est alambiqué?

Cela peut semble plutôt argumentatif, mais je suis juste allé à travers SQLAlchemy de ORM tutoriel et s'est terminé avec le code suivant:

from sqlalchemy import create_engine
from sqlalchemy import Table, Column, Integer, String, MetaData, ForeignKey
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
engine = create_engine('sqlite:///:memory:', echo=True)
metadata = MetaData()
users_table = Table('users', metadata,
Column('id', Integer, primary_key=True),
Column('name', String),
Column('fullname', String),
Column('password', String)
)
metadata.create_all(engine)
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)
fullname = Column(String)
password = Column(String)
def __init__(self, name, fullname, password):
self.name = name
self.fullname = fullname
self.password = password
def __repr__(self):
return "<User('%s','%s', '%s')>" % (self.name, self.fullname, self.password)
users_table = User.__table__
metadata = Base.metadata
Session = sessionmaker(bind=engine)
Session = sessionmaker()
Session.configure(bind=engine)  # once engine is available
session = Session()
# actually using the ORM isn't too bad..
ed_user = User('ed', 'Ed Jones', 'edspassword')
session.add(ed_user)
our_user = session.query(User).filter_by(name='ed').first() 
print our_user
session.add_all([
User('wendy', 'Wendy Williams', 'foobar'),
User('mary', 'Mary Contrary', 'xxg527'),
User('fred', 'Fred Flinstone', 'blah')])
ed_user.password = 'f8s7ccs'
print session.dirty
print session.new
session.commit()
for instance in session.query(User).order_by(User.id): 
print instance.name, instance.fullname
for name, fullname in session.query(User.name, User.fullname): 
print name, fullname

Cela semble incroyablement compliqué pour un Hello World table, surtout par rapport à l'à peu près similaire SQLObject code:

from sqlobject import SQLObject, StringCol, sqlhub, connectionForURI
sqlhub.processConnection = connectionForURI('sqlite:/:memory:')
class Person(SQLObject):
fname = StringCol()
mi = StringCol(length=1, default=None)
lname = StringCol()
Person.createTable()
p = Person(fname="John", lname="Doe")
p.mi = 'Q'
p2 = Person.get(1)
print p2
print p2 is p

Je comprends SQLAlchemy est "le plus fort", mais que la puissance semble venir à un coût, ou ai-je raté quelque chose?

  • L'alimentation a un coût? Que dites-vous?
  • SQLAlchemy de puissance se fait au prix de la simplicité d'utilisation?
  • Essayez Élixir comme mentionné ci-dessous, votre Bonjour tout le Monde sera très similaire à SQLObject, et vous serez toujours en mesure d'accéder à la SQLAlchemy couche. J'ai utilisé SQLObject et frustré par ses limites, et je suis très heureux avec l'Élixir de la mesure (il manque un peu de documentation et de soutien, mais l'utilisateur de base semble limité malheureusement).
  • On n'a pas tout simplement ajouter un point d'interrogation à une instruction.
InformationsquelleAutor dbr | 2009-05-13