У меня есть такой код:

           class AllData(APIView):

            def get(self, *args):

               with connection.cursor() as cursor:
                cursor.execute(
                "SELECT authapi_user.id, authapi_tweet.created_on 
                 FROM authapi_tweet 
                 INNER JOIN authapi_user 
                 ON authapi_user.id = authapi_tweet.author_id 
                 ORDER BY created_on DESC;")

Я хочу, чтобы условная часть 'On' соответствовала всем author_id, которые будут переданы из * args. Я знаю, как использовать данные args в запросе, но как я могу динамически изменить количество условий, которые он будет проверять, чтобы он перебирал все author_ids?

1
Luis Rodriguez 21 Дек 2019 в 06:20

1 ответ

Во-первых, вы должны получить параметры из query_params следующим образом:

self.request.query_params.get('') # get any parameter

Если переменная args содержит author_ids, вы должны создать предложение where:

where_clause = f"({' , '.join(args)})"

И теперь измените ваш запрос следующим образом:

f"SELECT authapi_user.id, authapi_tweet.created_on 
             FROM authapi_tweet 
             INNER JOIN authapi_user 
             ON authapi_user.id = authapi_tweet.author_id 
             where authapi_tweet.author_id in {where_clause}
             ORDER BY created_on DESC;"
0
ahmadgh74 21 Дек 2019 в 12:45