首页 > 解决方案 > 在 Django 中使用原始 SQL 打开事务是安全的

问题描述

在 Django(3.1 版)中使用默认设置是安全的:

with connection.cursor() as cursor:
    cursor.execute("BEGIN")
    
# Some SQL operations

commit_or_rollback = "COMMIT" if success else "ROLLBACK"
with connection.cursor() as cursor:
    cursor.execute(commit_or_rollback)

或者我之前必须False使用set_autocommit方法设置自动提交,因为 Django 的自动提交会关闭事务?还是自动提交被隔离了,我的代码不会有问题?

如果您问我为什么要使用原始 SQL 进行事务处理:我已经尝试按照文档指示手动使用事务,但它在多进程环境中存在一些问题,因此我必须使用原始查询来实现

标签: pythondjangopostgresql

解决方案


好的,我一直在阅读更多内容,在我的项目中进行测试,并在数据库日志中查看 Django 执行的查询。使用带有原始 SQL 的事务似乎是安全的,因为自动提交会通过任何操作开始一个新事务,并且不会干扰其他连接打开的事务


推荐阅读