【问题标题】:How to write an SQL query comparing between two dates?如何编写比较两个日期的 SQL 查询?
【发布时间】:2020-03-01 18:07:18
【问题描述】:

我为 Chartit 编写了这段代码,但我想要一个 SLQ 原始查询:

def weather_chart_day_view(request):
    patient=request.POST['patient']
    id=patient_complete.objects.get(complite=patient).id
    date=request.POST['date']
    date1=request.POST['date1']
    fsuivie_horraire.objects.raw('SELECT  id,date_sh, avg(temp)as 
temp, patient FROM 
    public.fsuivie_horraire where  patient='+str(id)+' and date_sh > 
'+date+' group  by id,date_sh, patient;')} '''

我收到了这个错误:

/graphe/temperature_jour/ 处的编程错误 运算符不存在:日期 > 整数 第 1 行:...lic.fsuivie_horraire,其中 patient=3 和 date_sh > 2020-03-...

【问题讨论】:

  • 请不要。您将数据库暴露给可能的 SQL 注入。你到底想做什么?通常最好写一个 ORM 查询。请分享您的模型并说明您的目标
  • 假设用户在'date' POST 参数中写入'' OR 1=1,这样数据库就会暴露。或者更糟糕的是''; DROP DATABASE ...,那么它可以删除你所有的数据。
  • 我想根据患者的身份计算一两个月或一年的温度总和,这取决于两个值之间的日期

标签: python sql django


【解决方案1】:

正如其他人所提到的,您在这里很容易受到 SQL 注入攻击。然而,尽管如此。我猜问题出在您的date 字段上。假设它是 DateTime 字段,则需要引用。

尝试将查询更改为

'SELECT id, date_sh, avg(temp) as temp, patient FROM 
    public.fsuivie_horraire where  patient='+str(id)+' and date_sh > \''+date+'\' 
    group by id, date_sh, patient;'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多