程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何按日期搜索?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决如何按日期搜索??

开发过程中遇到如何按日期搜索?的问题如何解决?下面主要结合日常开发的经验,给出你关于如何按日期搜索?的解决方法建议,希望对你解决如何按日期搜索?有所启发或帮助;

我正在尝试从数据库中搜索两个日期范围之间的记录。这是我的代码 意见:

def profile(request):
    if request.method == 'POST':
        fromdate = request.POST.get('from')
        todate = request.POST.get('to')
        cursordate = connection.cursor()
        cursordate.execute('SELECT * FROM Lesson WHERE StartDateTime between "'+fromdate+'" and "'+todate+'"'
            )
        data = dictfetchall(cursordate)
        return render(request,'personal.HTML',{'data':data})
    else:
        cursordate = connection.cursor()
        cursordate.execute('SELECT * FROM Lesson')
        data = dictfetchall(cursordate)
        return render(request,{'data':data})

HTML:

{% for lesson in data1 %}

<div class="card mb-3 mt-1 shadow-sm">
    <div class="card-body">
        <p class="card-text">
        <div class="row">
                <div class="col-2">
                    <div>{{ lesson.StartDateTime}} - {{ lesson.EndDateTime}}</div>
                </div>
                <div class="col-4">
                    <div>{{ lesson.name }}</div>
                </div>
        </div>
        <div class="mt-5"></div>
        </p>

    </div>
</div>
{% endfor %}

但我收到以下错误:

InvalID column name "2021-03-02". (207) (sqlExecDirectW); [42S22] [Microsoft][ODBC Driver 17 for sql Server][sql Server]InvalID column name "2021-03-03". (207)')

这是否与“StartDateTime”的类型是DateTime 而不是Date 这一事实有关? 但是,我尝试在 sql 查询中将日期与时间进行硬编码,但仍然失败。 (我知道在ORM Django的帮助下可能会完成,但我需要使用原始sql)

解决方法

上面的查询也可以通过ORM实现,写成

Lesson.objects.filter(StartDateTime__gte=fromdate,StartDateTime__lt=to_date)
,

您可以将参数作为参数传递,因此:

fromdate = request.POST.get('from')
todate = request.POST.get('to')
with connection.cursor() as cursordate:
    cursordate.execute(
        'SELECT * FROM Lesson WHERE StartDateTime BETWEEN %s AND %s;'
        [fromdate,todate]
    )

如果 fromdate 是例如 '2021-03-25' 并且 todate'2021-04-13',那么我们可以过滤在这些日期之间开始的 Lession

然而,使用原始查询不是一个好主意。通过使用问题中的字符串格式化查询,您可以使 Web 应用程序容易受到 SQL injection [wiki] 的攻击。此外,它需要手动进行各种反序列化。

通过使用 Django ORM,我们可以使用:

fromdate = request.POST.get('from')
todate = request.POST.get('to')
Lession.objects.filter(StartDateTime__range=(fromdate,todate))

由于我们在这里检索数据,而不是更改/更新/删除/创建数据,因此这通常是通过 GET 请求而不是 POST 请求完成的。

大佬总结

以上是大佬教程为你收集整理的如何按日期搜索?全部内容,希望文章能够帮你解决如何按日期搜索?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: