django - django:如何在函数中禁止数据库访问
问题描述
上下文:我们的项目有跨越 ForeignKey 关系的 DRF 序列化程序。因此,当我获得对象的 ListView 时,我会为每个对象获得额外的数据库命中,即 100 个项目的列表让我获得 100 个额外的数据库查询。不好。为了解决这个问题,我在我的视图中使用select_related
/prefetch_related
在序列化之前进行必要的连接。
问题:很难跟上select_related
视图中的所有 s,尤其是当不同的开发人员使用相同的功能和序列化程序时。所以我想知道是否有办法禁止在函数中访问数据库(无论是视图还是序列化方法等)。第一个想法是将其包装在一个可计数的装饰器中,connection.queries
但该计数器在生产中始终为空(何时DEBUG=False
)。
那么有没有另一种方法来计算数据库DEBUG
查询False
?
解决方案
尝试通过限制数据库查询来装饰方法和类对我来说似乎是一种完全错误的方法。如果您想密切关注视图执行的数据库查询的数量,您应该使用单元测试。
Django 有一个测试断言来计算查询:
with self.assertNumQueries(2):
response = self.client.get(my_url)
这将确保只有 2 个数据库查询来获取这个特定的视图。
推荐阅读
- php - 在 Laravel 中重定向时不支持 GET 方法
- opengl - OpenGL双溢出
- phpmyadmin - 有谁知道为什么 XAMPP 的主机名 ec2amaz-1qpqh3j 具有完全权限且没有密码保护?
- ruby-on-rails - 不同布局错误中的字体真棒宝石
- javascript - 将静态问题转化为动态问题
- javascript - 将道具从孩子发送到父母返回类型错误:_this.props.removeEl 不是函数
- php - 电子邮件未使用 filter_var 进行验证
- html - 在下拉菜单选项中添加 CSS 矩形
- php - 在 Web 浏览器中运行在 NetBeans 中创建的 PHP 文件
- c# - 如何在点击时增加发票 ID