Python django queryset到sqlalchemy

Python django queryset到sqlalchemy,python,sqlalchemy,Python,Sqlalchemy,我有一个用django编写的分页逻辑,需要在sqlalchemy中转换。我是炼金术新手。我读了多篇文章,但仍然无法理解如下逻辑 def _prepare_filter_expression( field_name: str, index: int, cursor: List[str], sorting_fields: List[str], sorting_direction: str, ) -> Tuple[Q, Dict[str, Union[st

我有一个用django编写的分页逻辑,需要在sqlalchemy中转换。我是炼金术新手。我读了多篇文章,但仍然无法理解如下逻辑

def _prepare_filter_expression(
    field_name: str,
    index: int,
    cursor: List[str],
    sorting_fields: List[str],
    sorting_direction: str,
) -> Tuple[Q, Dict[str, Union[str, bool]]]:

    field_expression: Dict[str, Union[str, bool]] = {}
    extra_expression = Q()
    for cursor_id, cursor_value in enumerate(cursor[:index]):
        field_expression[sorting_fields[cursor_id]] = cursor_value

    if sorting_direction == "gt":
        extra_expression |= Q(**{f"{field_name}__{sorting_direction}": cursor[index]})
        extra_expression |= Q(**{f"{field_name}__isnull": True})
    elif cursor[index] is not None:
        field_expression[f"{field_name}__{sorting_direction}"] = cursor[index]
    else:
        field_expression[f"{field_name}__isnull"] = False

    return extra_expression, field_expression


def _prepare_filter(
    cursor: List[str], sorting_fields: List[str], sorting_direction: str
) -> Q:
    """Create filter arguments based on sorting fields.

    :param cursor: list of values that are passed from page_info, used for filtering.
    :param sorting_fields: list of fields that were used for sorting.
    :param sorting_direction: keyword direction ('lt', gt').
    :return: Q() in following format
        (OR: ('first_field__gt', 'first_value_form_cursor'),
            (AND: ('second_field__gt', 'second_value_form_cursor'),
                ('first_field', 'first_value_form_cursor')),
            (AND: ('third_field__gt', 'third_value_form_cursor'),
                ('second_field', 'second_value_form_cursor'),
                ('first_field', 'first_value_form_cursor'))
        )
    """
    filter_kwargs = Q()
    for index, field_name in enumerate(sorting_fields):
        if cursor[index] is None and sorting_direction == "gt":
            continue

        extra_expression, field_expression = _prepare_filter_expression(
            field_name, index, cursor, sorting_fields, sorting_direction
        )
        filter_kwargs |= Q(extra_expression, **field_expression)

    return filter_kwargs
当使用django时,我要做的是传递queryset以及基于字段和方向进行排序的参数,以便在上面的逻辑中应用进一步的查询

所以,我的问题是如何在sqlalchemy中编写以下查询

extra_expression = Q()
extra_expression |= Q(**{f"{field_name}__{sorting_direction}": cursor[index]})
下面是完整代码的要点