Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在WHERE子句中使用函数编写SQL SELECT语句是否有Django等价物?_Mysql_Django_Python 3.x_Sqlite - Fatal编程技术网

Mysql 在WHERE子句中使用函数编写SQL SELECT语句是否有Django等价物?

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等价物 是的,您可以通过以下方式使用:

我有一系列的蛋白质序列比对,需要删除插入的“-”字符,以便在序列中搜索模式

我可以通过以下SQL查询执行此操作:

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
)