为什么在SqlAlchemy中我总是需要分两步来完成?
import sqlalchemy as sa
import sqlalchemy.orm as orm
engine = sa.create_engine(<dbPath>, echo=True)
Session = orm.sessionmaker(bind=engine)
my_session = Session()
为什么我不能像这样一次性完成(这可能会更简单,不是吗?)以下内容:
import sqlalchemy as sa
import sqlalchemy.orm as orm
engine = sa.create_engine(<dbPath>, echo=True)
Session = orm.Session(bind=engine)
在最一般的意义上,会话建立与数据库的所有对话,并表示在其生命周期中加载或关联的所有对象的“保留区域”。它提供了获取查询对象的入口点,该查询对象使用会话对象的当前数据库连接将查询发送到数据库,将结果行填充到对象中,然后将这些对象存储在会话中,该对象位于名为Identity Map的结构中,Identity Map是一种数据结构,用于维护每个对象的唯一副本,其中“unique”表示“只有一个具有特定主键的对象”。
试着
pprint
看看里面是什么下面是故事的其余部分:http://docs.sqlalchemy.org/ru/latest/orm/session.html
存在
sessionmaker()
的原因是,它所需的各种“配置”参数只需在一个地方设置,而不需要一遍又一遍地重复“bind=engine、autoflush=False、expire\on_commit=False”等。此外,sessionmaker()
还提供了一个“可更新”接口,这样您就可以在应用程序中的某个地方设置它:但稍后,当您知道要与哪个数据库通信时,可以向其中添加配置:
它还充当一个“可调用”来传递给非常常见的
scoped_session()
构造:尽管如此,这些只是文档所指的约定,以便呈现一致的“如何使用”故事。如果更方便的话,没有理由不能直接使用构造函数,我一直在使用
Session()
构造函数。只是,在一个不平凡的应用程序中,您可能最终会在某种可调用函数内部粘贴对Session()
的构造函数调用,sessionmaker()
作为该可调用函数的默认值。相关问题 更多 >
编程相关推荐