可以在没有显式session.add()的情况下将对象添加到SQLAlchemy会话中吗?

sh-*_*eta 4 python sqlalchemy

我有许多类使用SQLAlchemy映射到表(如果重要的话,非声明性地).因为我希望应用程序可以进行单元测试,所以所有SQLAlchemy会话交互都被隔离到一个类中.使用该应用程序是这样的:

m = Model("mysql://localhost/mydb")
s1 = Service("somename")
m.session.add(s1)
s1 is m.get_service("somename") # True
Run Code Online (Sandbox Code Playgroud)

它实际上比那更精简,但在这里和我一起工作.

是否可以跳过session.add()步骤?换句话说,如果我实例化一个映射类,是否有可能自动添加到活动的SQLAlchemy会话(如果有的话)?

Nat*_*usa 5

在SQLAlchemy中,您只能通过将其元数据绑定到引擎来对表执行此操作.这不适用于SQLALchemy的ORM部分.

http://www.sqlalchemy.org/docs/core/schema.html?highlight=metadata#binding-metadata-to-an-engine-or-connection

这种方法的一种方法是使用可在任何地方访问的范围会话.

http://www.sqlalchemy.org/docs/orm/session.html?highlight=scoped%20session#sqlalchemy.orm.scoped_session