ORA-00904:"2022-01-20":标识符无效



我在从数据库搜索两个日期范围之间的记录时遇到问题。

下面是我的代码片段:

我等待你的帮助:

def mostraDate(request):
if request.method == "POST":
fromDate = request.POST.get('fromDate')
toDate = request.POST.get('toDate')
cursor = Sms.objects.raw('select process_id, date_received,originator_msisdn, error_code from sms where date_replyed between "'+fromDate+'"and"'+toDate+'"')
#cursor = Sms.objects.raw('''select process_id, date_received,originator_msisdn, error_code from sms where date_replyed between  ''', [fromDate] ,'''and''' ,[fromDate])
return render(request, 'mostraDate.html', {"data": cursor})
else:
displaydate= Sms.objects.order_by('date_received').reverse()
paginator = Paginator(displaydate, 5)
page = request.GET.get('page')
displaydate = paginator.get_page(page)
return render(request, 'mostraDate.html', {"data": displaydate})

您可以传递这两个参数并使用:

def mostraDate(request):
if request.method == 'POST' and 'fromDate' in request.POST and 'toDate' in request.POST:
displaydate = Sms.objects.raw(
'SELECT process_id, date_received,originator_msisdn, error_code'
'FROM sms'
'WHERE date_replyed BETWEEN%sAND%s',
[request.POST['fromDate'], request.POST['toDate']]
)
else:
displaydate = Sms.objects.order_by('-date_received')
paginator = Paginator(displaydate, 5)
page = request.GET.get('page')
displaydate = paginator.get_page(page)
return render(request, 'mostraDate.html', {'data': displaydate})

但是没有必要使用原始查询。事实上,通过这样做,您将失去进一步排序、过滤和分页的能力。您可以使用进行过滤

def mostraDate(request):
if request.method == 'POST' and 'fromDate' in request.POST and 'toDate' in request.POST:
displaydate = Sms.objects.filter(date_replyed__range=(request.POST['fromDate'], request.POST['toDate']))
else:
displaydate = Sms.objects.order_by('-date_received')
paginator = Paginator(displaydate, 5)
page = request.GET.get('page')
displaydate = paginator.get_page(page)
return render(request, 'mostraDate.html', {'data': displaydate})

但是,通常使用GET请求进行筛选,POST请求通常用于进行状态更改,如登录/注销、创建/更新/删除实体等。GET请求通常用于检索数据。这可以是所有数据,也可以是经过过滤的变体。因此,GET请求在这里更合适。

最新更新