Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.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/7/sqlite/3.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
Django原始查询过滤器(按年份和月份)_Django_Sqlite - Fatal编程技术网

Django原始查询过滤器(按年份和月份)

Django原始查询过滤器(按年份和月份),django,sqlite,Django,Sqlite,我需要编写django原始查询来过滤年份和月份。为此,我尝试了以下代码 cursor = connection.cursor() cursor.execute('SELECT SUM(work_time) AS sum FROM structure_tracking_details WHERE employee_id = %s AND tree_id=%s AND project_structure=%s AND year(date)=%s AND month(date)=%s GROUP

我需要编写django原始查询来过滤年份和月份。为此,我尝试了以下代码

cursor = connection.cursor()
cursor.execute('SELECT  SUM(work_time) AS sum FROM structure_tracking_details WHERE employee_id = %s AND tree_id=%s AND project_structure=%s AND year(date)=%s AND month(date)=%s  GROUP BY project_structure ', [employee_id,tree_id,project_structure,select_year,select_month] )
sum1=str(cursor.fetchone())

但是它告诉
没有这样的函数:year
我的代码怎么了?

为什么不使用ORM

如果您有这样的模型:

class Work(models.Model):
    date_field = models.DateField()
    # your other fields
您可以使用和查找来执行此查询:

现在,添加剩下的内容,即
工作时间
和分组方式的总和:

from django.models import Sum

Work.objects.filter(date_field__year=2013,
                    date_field__month=2,
                    employee_id=1,
                    ...).values('project_structure').aggregate(total=Sum('work_time'))

你为什么不使用ORM

如果您有这样的模型:

class Work(models.Model):
    date_field = models.DateField()
    # your other fields
您可以使用和查找来执行此查询:

现在,添加剩下的内容,即
工作时间
和分组方式的总和:

from django.models import Sum

Work.objects.filter(date_field__year=2013,
                    date_field__month=2,
                    employee_id=1,
                    ...).values('project_structure').aggregate(total=Sum('work_time'))
。如果你想要一年,你可以用这样的东西-

select strftime('%Y', datetime(datefield, 'unixepoch')) as year from table_name
因此,您可以编写
strftime(“%Y”,date)=%s
,而不是编写
year(date)=%s
。它应该会起作用。我还没试过

或者让所有这些头痛的症状消失,使用Django的ORM。你应该首先使用它

编辑:
根据OP的说法,这个查询有效-

cursor.execute("SELECT SUM(work_time) AS sum FROM structure_tracking_details WHERE employee_id = %s AND tree_id=%s AND project_structure=%s AND strftime('%%Y', date) = %s AND strftime('%%m', date) = %s GROUP BY project_structure ", employee_id, tree_id, project_structure, select_year, select_month])
%Y
需要使用
%Y
进行转义。如果你想要一年,你可以用这样的东西-

select strftime('%Y', datetime(datefield, 'unixepoch')) as year from table_name
因此,您可以编写
strftime(“%Y”,date)=%s
,而不是编写
year(date)=%s
。它应该会起作用。我还没试过

或者让所有这些头痛的症状消失,使用Django的ORM。你应该首先使用它

编辑:
根据OP的说法,这个查询有效-

cursor.execute("SELECT SUM(work_time) AS sum FROM structure_tracking_details WHERE employee_id = %s AND tree_id=%s AND project_structure=%s AND strftime('%%Y', date) = %s AND strftime('%%m', date) = %s GROUP BY project_structure ", employee_id, tree_id, project_structure, select_year, select_month])


需要使用
%%Y
转义的
%Y

年份是您的列名?没有列名是日期您有什么数据库作为后端?sqlite数据库现在稍后我将更改为mysql@Lahiruzz那你为什么要标记mysql?我认为SQLite没有
YEAR()
函数。YEAR是您的列名吗?没有列名是date您有什么数据库作为后端?SQLite数据库现在稍后我将更改为mysql@Lahiruzz那你为什么要标记mysql?而且我不认为SQLite有
YEAR()
function.OP可能只是查询一些他们没有建模的表。@Burhan:是否有用于Group by的函数@Lahiruzz@Burhan:你能帮我把这些总值分配给一些变量吗。var=完全正确?@Lahiruzz通读本手册;希望这能回答这个问题,任何其他的.OP都可能只是查询一些他们没有建模的表。@Burhan:GROUPBY有什么函数吗@Lahiruzz@Burhan:你能帮我把这些总值分配给一些变量吗。var=完全正确?@Lahiruzz通读本手册;希望这能回答这个问题和其他任何问题。我需要从表中筛选年份吗?有任何函数吗?现在我在索引140处得到了:不支持的格式字符“Y”(0x59),我不知道为什么:(尝试
“%Y”
而不是
“%Y”
。您的终端是单引号。同样的错误。这是我的查询::cursor.execute(“选择总和(工作时间))作为结构跟踪详细信息的总和,其中员工id=%s和树id=%s以及项目结构=%s和strftime(“%y”,日期)=%s和strftime(“%m”,日期)=%s按项目结构分组,[employee\u id,树id,项目结构,选择年,选择月])谁说过关于
y
?它是
y
。请阅读文档。我需要从表中筛选年份?是否有任何函数?现在我得到:索引140处不支持的格式字符“y”(0x59),我不知道为什么:(尝试
%y)
而不是
“%Y”
。您的终端是单引号。同样的错误。这是我的查询::cursor。执行(“从结构跟踪详细信息中选择SUM(工作时间)作为SUM,其中员工id=%s和树id=%s,项目结构=%s和strftime(“%Y”,日期)=%s和strftime(“%m”,日期)=%s按项目结构分组”,[employee\u id,tree\u id,project\u structure,select\u year,select\u month])谁说了关于
y
?是
y
。请阅读文档。