Использование динамического имени столбца для создания json_build_object в SQLAchemy

#python-3.x #postgresql #sqlalchemy

Вопрос:

Я пытаюсь создать json_build_object в sqlalchemy. Основываясь на некоторых условиях(не из условий данных, а из самого кода), я выбираю столбцы для отображения. Но это означает, что существует много избыточного кода. Есть ли способ, которым я могу поместить условие if внутри json_build_object , чтобы можно было уменьшить избыточность кода?

 if something:
    entryQ = (
        db.session.query(
            func.json_build_object(
                "column1",table.column1,
                "column2",table.column2,
                "column3",table.column3,
            )
        )
        .group_by(table.column3,table.column1,table.column2,)
        .all()
    )    
else:
    entryQ = (
        db.session.query(
            func.json_build_object(
                "column3",table.column3,
            )
        )
        .group_by(table.column3)
        .all()
    )    
 

к чему-то вроде:

 entryQ = (
    db.session.query(
        func.json_build_object(
            if something:
                "column1",table.column1,
                "column2",table.column2,
            "column3",table.column3,
        )
    )
    .group_by(table.column3,
        if something:
            table.column1,table.column2,
    )
    .all()
)    
 

Я пробовал использовать другую функцию

 def test():
    table_name = eval(table_name)
    return "column1",table_name.column1, "column2", table_name.column2

def test():
    table_name = eval(table_name)
    return table_name.column1, table_name.column2

entryQ = (
    db.session.query(
        func.json_build_object(
            test()
            "column3",table.column3,
        )
    )
    .group_by(table.column3,
        test2()
    )
    .all()
)    
 

Но test() возвращает атрибут InstrumentedAttribute, т. е. функция уже определяет тип объекта, и psycopg2 хочет выдать сообщение об ошибке «не удается преобразовать InstrumentedAttribute «. Это необходимо для самого преобразования.