scheint Dies kann eher argumentative, aber ich ging gerade durch SQLAlchemy des ORM tutorial und endete mit dem folgenden Code auf:SQLAlchemy ist verschachtelt?
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
Dieses für effektiv einen Hallo Welt Tisch unglaublich kompliziert scheint, vor allem im Vergleich zu dem in etwa ähnlich 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
ich verstehe SQLAlchemy „mächtiger“ ist, aber diese Macht scheint zu einem Preis zu kommen, oder bin ich etwas fehlt?
Strom kommt auf Kosten? Was sagst du? –
Die Leistung von SQLAlchemy geht auf Kosten der Einfachheit der Nutzung? – dbr
Versuchen Sie Elixir wie unten erwähnt, Ihre Hello World wird SQLObject sehr ähnlich sein, und Sie werden weiterhin auf die SQLAlchemy-Ebene zugreifen können. Ich habe SQLObject benutzt und war frustriert von seinen Einschränkungen, und ich bin bisher sehr zufrieden mit Elixir (es fehlt ein wenig Dokumentation und Unterstützung, aber die Benutzerbasis scheint leider begrenzt). –