Я пытаюсь создать динамическое соединение с or_ и and_, но не генерирует SQL-запрос или.Sqlalchemy динамически строить or_ conj и_
Число операторов or_ и and_ зависит от каждого запроса.
запрос:
q = se.query(Publicacion.update_time).join(Categoria).order_by(Publicacion.update_time.desc())
q = q.filter(and_(Publicacion.id_group_id == '103738479786979'))
q = q.filter(and_(Publicacion.id_categoria_id == 1),)
q = q.filter(and_(Categoria.estatus == True),)
q = q.filter(or_(Publicacion.message.ilike('%Obsequios%')),)
q = q.filter(or_(Publicacion.message.ilike('%jose%')))
q = q.filter(or_(Publicacion.message.ilike('%compu%')))
из SQL:
SELECT showgroups_publicacion.update_time AS showgroups_publicacion_update_time
FROM showgroups_publicacion JOIN showgroups_categoria ON showgroups_categoria.id = showgroups_publicacion.id_categoria_id
WHERE showgroups_publicacion.id_group_id = %(id_group_id_1)s AND showgroups_publicacion.id_categoria_id = %(id_categoria_id_1)s AND showgroups_categoria.estatus = true AND showgroups_publicacion.message ILIKE %(message_1)s AND showgroups_publicacion.message ILIKE %(message_2)s AND showgroups_publicacion.message ILIKE %(message_3)s ORDER BY showgroups_publicacion.update_time DESC
В конце я решил так, если есть более элегантный, поделитесь им:
Y = and_ (column1 == 1)
Y = and_ (column2 == 'SQL',Y)
O = or_ (column1 == 2)
O = or_ (column2 == 'Python',O)
session.query(Model).filter(or_(O,Y))
И каков ваш вопрос? –