在SQLAlchemy中,为什么在关闭会话后我仍然可以提交数据库?

时间:2015-06-17 05:55:30

标签: python postgresql sqlalchemy

我第一次使用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数据库中的表。如果删除会话不会影响其功能,删除它的目的是什么?我做错了吗?

1 个答案:

答案 0 :(得分:3)

scoped_session是一个特殊的工厂对象。访问query()等方法会创建会话。每个范围都存在一个会话,因此每次访问query(例如)时都将使用相同的会话。调用remove()将删除会话,下一个属性访问将创建一个新会话。

在会话上调用close()将释放与其关联的连接资源。当会话再次使用时,它们将被重新获得。

close()remove()是"临时",他们将来不会使会话无法使用。通常情况下,您不需要closeremove scoped_session,它会自动管理。