我不禁想到在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。缺点是我的所有课程都与某个特定课程相关联,但我想不出任何我希望有什么不同的情况。我试图想出为什么我之前没有见过这种方法(除了我的经验不足)......
答案 0 :(得分:1)
嗯,有很多方法可以做这种事情 - 请参阅Mike Bayer关于Magic, a "new" ORM的诙谐文章。 SQLAlchemy将自己定位为工具包而不是框架,因此可以根据不同场景的需要以不同的方式使用它。例如,会出现单个会话不足的情况。
在SQLAlchemy之上还有第三方声明层 - 例如Elixir。它提供了一种稍微不同的做事方式。