python - 在 SQLAlchemy 中,为什么我在关闭 session 后仍然可以提交到数据库?

标签 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 数据库中的表。如果删除 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/

相关文章:

python - sqlalchemy 外键/查询连接

python - Windows 中 Python 长路径名出现 FileNotFoundError

python - 如何使用 sqlalchemy 创建外键引用

python - SqlAlchemy delete() 函数不起作用

python - 从 perl 转向 python,我想知道 python 是否有类似 DBI 的东西?

json - 在 Postgres jsonb_to_recordset() 中显示为 NULL 的键值

sql - 如何查找不同表中的行数

python - Django URL 模式

python - 使用 Celery 和 Amazon SES 在 Django 中安排电子邮件

python - 内化设置语言重定向 View 。如何重定向到同一页面?