PLY поддержание состояния между запросами (Django REST Framework) - PullRequest
0 голосов
/ 02 апреля 2020

Я использую PLY для анализа некоторых пользовательских данных, создавая запрос SQL в виде строки, которая будет возвращена пользователю. Проблема, с которой я сталкиваюсь, заключается в том, что анализатор поддерживает состояние между запросами, поэтому следующий пользователь добавил к своему предыдущему пользователю запрос SQL.

Состояние сохраняется и обновляется следующим образом:

import ply.yacc as yacc

class ParserState:
    query = 'ORDER BY '

def p_binary(p):
    ...
    ParserState.query += 'SOME SQL HERE '

(Примечание: это поведение также происходит, даже если 'query' находится за пределами класса)

Я работал над этим, стараясь вручную сбросить строку между запросами, однако я хочу выяснить, как остановить поддержание состояния между запросами?

1 Ответ

0 голосов
/ 02 апреля 2020

В итоге я понял это с некоторыми экспериментами. Решением было создать новый экземпляр объекта, который содержит строку SQL в вызываемом представлении, и передать ссылку на этот объект синтаксическому анализатору. ParserState.query был изменен для хранения этой ссылки и обновляется при синтаксическом анализе с возвращаемым результатом.

Как только запрос будет завершен, объект будет автоматически уничтожен, что приведет к сбросу состояния.

...