“此'虚拟'交易是在需要时自动创建的,也可以使用session.begin()方法启动。”
这为我提出了几个问题:i我希望,如果我只执行读取(查找)操作,则SQLalchemy不会创建事务。但是,我不确定在使用时是否仍然隐含交易:如果只有在需要的情况下才真正创建交易,如官方文档中所述,这是否意味着没有为仅阅读操作创建交易吗? 在Spring Data JPA中,可以使用@transactional(ReadOnly = true)来处理仅阅读操作。我对Sqlalchemy中的同等方法以及它是否支持完全不启动交易的真正阅读交易感到好奇。
session.execute(select(...))
我已经搜索了文档,但找不到有关此行为的明确解释。 coundy某人是否可以澄清SQLalchemy是否总是开始进行某些查询的交易,如果是这样,如何避免纯粹的只读操作的不必要的交易?
任何见解将不胜感激。谢谢!
您的问题非常有趣。作为同时使用
SpringBoot
和
FastAPI
的人,我曾经考虑隔离级别,繁殖行为和仅阅读选项。但是,在与
SpringBoot
FastAPI
一起工作时,我从来没有真正考虑过这些方面。
在您的问题上提到,我对在
SQLAlchemy
中实施仅阅读会话进行了一些研究。尽管
SQLAlchemy
没有提供仅内置的读取模式,但您可以使用SessionEvents
取消提交或冲洗操作来实现此行为。这里是一个例子:
SQLAlchemy
这种方式,您可以模拟一个只读会话,类似于如何在Springboot中配置仅交易式读取行为。