#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
«. Это необходимо для самого преобразования.