mysql在原始sql查询中传递动态变量

qf9go6mv  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(350)

如何存档以下内容。。。
我需要传递两个变量date,它以长格式出现,并使用原始sql django在子查询中应用这个变量

def duplicatephoneno(request):

    cursor = connection.cursor()
    payload = json.loads(request.body.decode('utf-8'))
    print(payload)
    if payload:
        startdate=payload['from']
        enddate=payload['to']
        with connection.cursor() as cursor:
            cursor.execute(MYSQLdb.escape_string("SELECT * FROM `allergy` WHERE `allergy`.`patient_n_key` IN (SELECT `patient_masters`.`patient_n_key` FROM `patient_masters` WHERE `patient_masters`.`created_on`between %s AND %s)",[startdate], [enddate]))
            row = dictfetchall(cursor)
            patientuser=serializers.serialize('json', row)
        return HttpResponse(patientuser, content_type='application/json;charset=utf8')
owfi6suc

owfi6suc1#

试试这个

def duplicatephoneno(request):
    payload = json.loads(request.body.decode('utf-8'))
    print(payload)

    if payload:
        startdate=payload['from']
        enddate=payload['to']
        with connection.cursor() as cursor:

            queries="SELECT * FROM `allergy` WHERE `allergy`.`patient_n_key` IN (SELECT `patient_masters`.`patient_n_key` FROM `patient_masters` WHERE `patient_masters`.`created_on`between %s AND %s)"
            data_tuple=(startdate,enddate)
            cursor.execute(queries,data_tuple)
            connection.commit()
            row = cursor.fetchall()
            patientuser=serializers.serialize('json', row)
            return HttpResponse(patientuser, content_type='application/json;charset=utf8')
cclgggtu

cclgggtu2#

文件提到了如何做到这一点。注意:如果使用的是sqlite数据库,则不能使用此方法。
顺便说一下,使用原始查询应该是您最后的选择。django orm现在相当不错,如果存在orm不支持的查询类型(罕见),或者orm生成的querystring与自定义的原始查询相比有很大的性能开销,那么实际上应该只使用原始查询。queryset(orm查询返回的对象)也很容易转换成json,就像您在这里所做的那样。

相关问题