này có thể có vẻ khá tranh cãi, nhưng tôi chỉ đi qua SQLAlchemy của ORM tutorial và kết thúc với đoạn mã sau:SQLAlchemy được phức tạp?
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
Điều này có vẻ vô cùng phức tạp cho hiệu quả một bảng Hello World, đặc biệt là so với các mã SQLObject khoảng tương tự:
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
Tôi hiểu SQLAlchemy là "mạnh hơn", nhưng sức mạnh đó dường như có chi phí hoặc tôi thiếu gì đó?
Điện có tính phí? Bạn đang nói gì vậy –
Sức mạnh của SQLAlchemy có chi phí sử dụng đơn giản? – dbr
Hãy thử Elixir như đã đề cập dưới đây, Hello World của bạn sẽ rất giống với SQLObject và bạn sẽ vẫn có thể truy cập lớp SQLAlchemy. Tôi đã sử dụng SQLObject và đã thất vọng bởi những hạn chế của nó, và tôi rất hài lòng với Elixir cho đến nay (nó thiếu một tài liệu nhỏ và hỗ trợ, nhưng cơ sở người dùng dường như có giới hạn không may). –