我有一些用python编写的函数。我想知道在这个函数中执行的所有 sql 查询。有没有办法编写类似的代码:
def f():
start_to_print_queries()
# ...
# many many python code
# ...
stop_to_print_queries()
Run Code Online (Sandbox Code Playgroud)
?
您可以使用 django 测试工具来捕获连接上的查询。假设默认连接,这样的事情应该工作:
from django.db import connection
from django.test.utils import CaptureQueriesContext
def f():
with CaptureQueriesContext(connection) as queries:
# ...
# many many python code
# ...
print(len(queries.captured_queries))
Run Code Online (Sandbox Code Playgroud)
请注意,这仅适用于调试模式 ( settings.DEBUG = True),因为它依赖于捕获查询的引擎。如果您使用多个连接,只需替换您感兴趣的连接。
如果您对查询的细节感兴趣,queries.captured_queries包含详细信息:sql 代码、参数和每个请求的时间。
此外,如果您需要在构建测试用例时对查询进行计数,您可以简单地断言该数字,如下所示:
def test_the_function_queries(self):
with self.assertNumQueries(42): # check the_function does 42 queries.
the_function()
Run Code Online (Sandbox Code Playgroud)
如果测试失败,Django 将打印所有查询供您检查。
| 归档时间: |
|
| 查看次数: |
1262 次 |
| 最近记录: |