2011-07-14 42 views
2

我不禁想到在SQLAlchemy中執行查詢所需的擊鍵次數有點偏高。通過declaritive_base類方法檢索SQLAlchemy查詢對象

DBSession.query(User).filter(...).first() 

做這樣的事情有什麼不對嗎?

DBSession = scoped_session(sessionmaker()) 

class BaseWithDBSession(object): 
    def delete(self): 
     DBSession.delete(self) 

    @classmethod 
    def query(cls): 
     return DBSession.query(cls) 


Base = declarative_base(cls=BaseWithDBSession) 

class User(Base): 
    __tablename__ = 'users' 
    id = Column(Integer, primary_key=True) 
    ... 

user = User.query().filter(User.id==1).one() 
user.delete() 

這種方法對我來說似乎更加簡潔,也意味着我不必在代碼文件之間導入DBSession。缺點是我的所有課程都與特定的課程相關,但我想不出任何我想要什麼不同的情況。我試圖想出爲什麼我之前沒有看到過這種方法的原因(除了我的經驗不足之外)......

回答

1

嗯,有很多方法可以做這種事情 - 請參閱Mike Bayer的口頭表達 - 臉頰帖子約Magic, a "new" ORM。 SQLAlchemy將自己定位爲一個工具箱而不是一個框架,以便根據不同場景的需要以不同的方式使用它。例如,當單個會話不夠時,會出現這種情況。

在SQLAlchemy之上還有第三方聲明層 - 例如, Elixir。它提供了一種稍微不同的做事方式。

+0

Mike Bayer的引用「SQLAlchemy不是一個框架......它是一個工具包」,似乎總結了我的概念問題,而Elixir完全按照上面所述。謝謝。 – mattjbray