python - 如何使用 django 加快 PostgreSQL 数据库中的正则表达式查询
问题描述
我正在尝试为我的 PostgreSQL 数据库创建正则表达式查询。我已经这样做了,但问题是使用正则表达式的查询比我按名称搜索的查询慢 3 倍。有什么方法可以加速正则表达式查询或任何其他选项来更快地获得结果?我使用 django 创建对数据库的查询。
我按品牌和型号搜索汽车的“正常”查询:
object_db = Car.objects.filter(brand='Ford', car_model='Focus-RS')
我创建这样的正则表达式查询:
object_db = Car.objects.filter(brand__regex=r'^Ford$', car_model__regex='^Focus[-_]*RS$')
我的模型:
class Car(models.Model):
car_data = models.ForeginKey(CarData, on_delete=models.CASCADE)
brand = models.CharField(max_length=100)
car_model = models.CharField(max_length=100)
class Meta:
index_together = (
('brand', 'car_model')
)
我得到了我想要的结果,但需要很长时间才能得到它。如何提高正则表达式查询的速度,或者是否有任何其他方法可以获得相同的结果?
解决方案
您可以使用iexact
和组合查询Q
:
object_db = Car.objects.filter(
brand__iexact="ford",
Q(car_model__iexact="focus-rs") | Q(car_model__iexact="focus_rs"))
这将匹配不区分大小写并对该car_model
字段执行“或”查询。
推荐阅读
- python - Pytorch 重命名训练模型的标签
- python-3.x - 我无法在 Excel 中打印 i 行中的所有值
- javascript - 如何在 iframe 中使用“隐藏”沙盒?
- python - 泡菜不可序列化的python对象
- ios - 尝试添加 UIImageView 数组的约束
- excel - 从文件资源管理器搜索中提取文件名到 Excel
- laravel - Vuejs - 如何创建或使用“编译 ID”?
- c++ - 派生对象的基类引用 - 策略模式
- python - Discord python bot:如何使用会员的最高角色颜色制作嵌入消息?
- angular - Angular JHipster 项目中的自定义日期选择器选项