Динамический необработанный запрос (select clause) Django

Я пытаюсь выполнить необработанный запрос в Django, в котором я динамически хочу выбрать имена столбцов. Например

   def func(all=True){
   if all:
      query_parameters = {
           'col': '*'
      }
   else:
      query_parameters = {
           'col': 'a,b,c'
      }
    with connections["redshift"].cursor() as cursor:
        cursor.execute(
            "select %(col)s from table limit 2 ;",
            query_parameters,
        )
        val = dictfetchall(cursor)
        return val
    }

Django выполняет его как.

select "*" from table limit 2;

так что вывод выглядит как select "*"

*

а в случае else выполняется как

select "a,b,c" from table limit 2;

поэтому на выходе получается a,b,c

Как я могу запустить команду так, чтобы Django выполнил ее как

select a , b , c from table limit 2

так, чтобы на выходе было

a b c 
1 2 3 
4 5 6 

Попробуйте это:

def func(all=True):
   if all:
      columns = '*'
   else:
      columns = 'a, b, c'
   with connections['redshift'].cursor() as cursor:
      cursor.execute(f'select {columns} from table limit 2;')
      val = dictfetchall(cursor)
      return val

Я сам нашел хак. Смотрите здесь

Пояснение

Подготовленный запрос шаг за шагом

Входные данные (нужные мне столбцы)

self.export_col = "a,b,c"

def calc_col(self):
        if self.exp == 'T':
            select_col = ""
            self.export_col = self.export_col.split(',')
            for col in self.export_col:
                select_col += col + ","
            select_col = select_col[:-1]
            self.export_col = select_col
        else:
            self.export_col += '*'

def prepare_query(self):
        query += " SELECT "
        query += self.export_col
        query += """ from table limit 2;"""
Вернуться на верх