Мне нужна помощь с использованием sql утверждений о том, где условия в моей Django программе - PullRequest
0 голосов
/ 20 января 2020

Это моя программа. Мне нужно изменить условие where в операторе SQL, чтобы оно генерировалось динамически с помощью программы python, потому что иногда условие в моем операторе where может не иметь значения. Я не хочу, чтобы он появлялся в заявлении SQL, когда нет значения. в

Большое спасибо, мне очень нужна помощь, я новичок ie, я не могу понять

@csrf_exempt
def test(request):
    if request.method == "GET":
        req_type = request.GET.get("get_data")
        if req_type:
            customer = request.GET.get('customer')
            order_type = request.GET.get("orderType")
            order_status = request.GET.get("orderStatus")
            with connection.cursor() as cursor:
                cursor.execute(
                    "SELECT account,order_id,start_at,update_at "
                    "FROM once  WHERE user_id=%s OR %s='' AND order_id=%s OR %s='' AND status=%s OR  %s='' ORDER BY order_id DESC ",
                    (customer, customer, order_type, order_type, order_status,order_status))
                verify_list = dict_fetchall(cursor)
            return HttpResponse(json.dumps(verify_list, cls=DecimalEncoder))
        else:
            with connection.cursor() as cursor:
                cursor.execute('SELECT id,`name` FROM goods;')
                goods_data = cursor.fetchall()
            with connection.cursor() as cursor1:
                cursor1.execute('SELECT id,account FROM `user`;')
                user_data = cursor1.fetchall()
            content = {"goods_data": goods_data, "user_data": user_data}
            return render(request, 'user/test.html', content)
    else:
        return HttpResponseRedirect(reverse('users:login'))

1 Ответ

0 голосов
/ 20 января 2020

если я хорошо понял вопрос, вы можете динамически построить строку запроса sql, например:

where = []

if customer:
    where.append(f"user_id={customer}")  # assuming customer is integer, put value without quotes
if order_type:
    where.append(f"order_id={order_type}")  # assuming order_type is integer, put value without quotes
if order_status:
    where.append(f"status='{order_status}'")  # assuming order_status is string, put value inside quotes

where = ' AND '.join(where)        
where = ('WHERE ' if where else '') + where

query = f"SELECT account, order_id, start_at, update_at FROM once {where} ORDER BY order_id DESC"

with connection.cursor() as cursor:
    cursor.execute(query)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...