Mysql 在WHERE子句中使用函数编写SQL SELECT语句是否有Django等价物?
我有一系列的蛋白质序列比对,需要删除插入的“-”字符,以便在序列中搜索模式 我可以通过以下SQL查询执行此操作:Mysql 在WHERE子句中使用函数编写SQL SELECT语句是否有Django等价物?,mysql,django,python-3.x,sqlite,Mysql,Django,Python 3.x,Sqlite,我有一系列的蛋白质序列比对,需要删除插入的“-”字符,以便在序列中搜索模式 我可以通过以下SQL查询执行此操作: select sequence from sequences where replace(sequences.sequence,"-","") like "%"+pattern+"%" 据我所知,在查询中进行替换和模式匹配应该比在python中遍历每个序列并进行替换和模式匹配更有效。这是正确的吗 如果1是正确的,那么是否存在该查询的Django等价物 是的,您可以通过以下方式使用:
select sequence
from sequences
where replace(sequences.sequence,"-","") like "%"+pattern+"%"
据我所知,在查询中进行替换和模式匹配应该比在python中遍历每个序列并进行替换和模式匹配更有效。这是正确的吗
如果1是正确的,那么是否存在该查询的Django等价物
是的,您可以通过以下方式使用: 它确实比获取所有记录并在Django/Python级别进行过滤更有效,但这仍然会导致线性搜索时间,这不是很有效 如果您能够以某种方式使用hypens准备模式,从而删除数据库中的Replace部分,可能会更好
from django.db.models import Value
from django.db.models.functions import Replace
Sequence.objects.annotate(
replaced=Replace('sequence', Value('-'), Value(''))
).filter(
replaced__icontains=pattern
)