Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.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
Python 有没有一种更有效的方法可以基于条件数量的参数在Django中编写这个定制SQL?_Python_Mysql_Sql_Django_Database Cursor - Fatal编程技术网

Python 有没有一种更有效的方法可以基于条件数量的参数在Django中编写这个定制SQL?

Python 有没有一种更有效的方法可以基于条件数量的参数在Django中编写这个定制SQL?,python,mysql,sql,django,database-cursor,Python,Mysql,Sql,Django,Database Cursor,我对SQL和Django相当陌生,我正在尝试为我在Django中构建的应用程序使用自定义SQL语句。我选择不使用ORM的原因是为了在花时间翻译和切换之前比较性能,看看是否可以让它工作 无论如何,该应用程序需要一系列用户定义的“过滤器”,如日期范围(2周、1个月、自定义范围)和工作类型清单,并从搜索中吐出结果 举个例子,我做了一个简单的查询,我在下面做了一些事情。以下面的语句为例,我需要将每个字符串(“office”、“教师”、“2019-07-01”等)替换为%s,然后传入参数。我计划构建一个条

我对SQL和Django相当陌生,我正在尝试为我在Django中构建的应用程序使用自定义SQL语句。我选择不使用ORM的原因是为了在花时间翻译和切换之前比较性能,看看是否可以让它工作

无论如何,该应用程序需要一系列用户定义的“过滤器”,如日期范围(2周、1个月、自定义范围)和工作类型清单,并从搜索中吐出结果

举个例子,我做了一个简单的查询,我在下面做了一些事情。以下面的语句为例,我需要将每个字符串(“office”、“教师”、“2019-07-01”等)替换为%s,然后传入参数。我计划构建一个条件参数列表,以便只传入python中的各种参数

从MySQL查询

SELECT * FROM joblist 
WHERE (job = 'office' OR job = 'teacher' OR job = 'student')
AND date > '2019-07-01' AND date < '2019-07-15';
我的问题是,如果我不知道首先需要多少%s或参数,如何填写语句的WHERE字段部分?根据用户选中的框的数量,它可能会有所不同,有2个作业参数或1个作业参数


我知道我可以做一堆if-elif语句,并重复说明可能的用户搜索的每个组合,但必须有更好的方法来做到这一点。有什么想法吗?

如果您使用Django,您可以在过滤器中使用
\u,而不是对同一列重复使用IFs

job_names = ('office', 'teacher', 'student')
Job.objects.filter(
    job__in=job_names,
    date__range=(date_from, date_to)
)

我假设您在某个地方有一个模型?这实际上是使用ORM的众多原因之一(以及安全性、优雅性、简单性等):)目前,我使用的sql查询经过优化,运行速度非常快,而ORM方法运行时间很长,所以我只想先让它以这种方式工作,然后再花时间回去翻译更详细的内容。从文档来看,定制SQL根本没有利用模型层@WilleMVanOnSem但是模型层只是构造了一个查询。通常这是在Python级别运行的,与执行查询相比几乎不需要时间。此外,ORM将,特别是对于像这样的简单情况,产生与您构建的查询相同的查询。@WillemVanOnsem我提供的示例主要简化了我正在运行的实际查询,其中包含大量数据。我知道我可以使用orm方法,我同意你的主张,因为这是django的卖点之一,但现在我希望在使用“django方法”之前,使用自定义sql来了解它的工作原理。有什么想法吗?
job_names = ('office', 'teacher', 'student')
Job.objects.filter(
    job__in=job_names,
    date__range=(date_from, date_to)
)