我第一次将 SQLAlchemy 与 Postgres 结合使用。完成舞蹈之后
engine = create_engine('postgresql://localhost/test', convert_unicode=True)
db_session = scoped_session(sessionmaker(
autocommit=False,
autoflush=False,
bind=engine
))
我运行代码将一些东西添加到 test
数据库,之后,我发出了 db_session.remove()
命令(和 .close( )
为好措施)。然而,我仍然能够查询和修改 test
数据库中的表。如果删除 session 不影响其功能,那么删除它的目的是什么?我做错了什么吗?
最佳答案
scoped_session
是一个特殊的工厂对象。访问诸如 query()
之类的方法会创建一个 session 。每个范围存在一个 session ,因此每次访问 query
(例如)时都将使用同一个 session 。来电 remove()
将删除 session ,下一个属性访问将创建一个新 session 。
调用 close()
在 session 上将释放与其关联的连接资源。再次使用session时会重新获取。
close()
和 remove()
是“临时的”,它们不会使 session 在未来无法使用。通常,您不需要关闭
或删除
scoped_session
,它会自动管理。
关于python - 在 SQLAlchemy 中,为什么我在关闭 session 后仍然可以提交到数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30883284/