#python #django #parsing
Вопрос:
У меня есть список строк, которые представлены в таком странном формате, как этот:
OR(EQUAL(id,111),EQUAL(id,222)) AND(EQUAL(id,333),EQUAL(name,"John"))
Я хочу разобрать эти строки и запустить их в качестве фильтра в Django, как это:
from django.db.models import Q People.objects.filter(Q(id=111) | Q(id=222)) People.objects.filter(Q(id=333) amp; Q(name="John"))
Есть ли парсер, который может мне в этом помочь? Или мне пришлось бы писать его с нуля?
Комментарии:
1. Что может быть полезно здесь, так это тот факт, что строки кажутся допустимым синтаксисом Python. Вы можете реализовать функции и выполнить
eval()
с пространством имен, ограниченным этими функциями. Только имена могут быть сложными.2. Где генерируются эти строки? Идеальным решением было бы изменить формат строк на что-то более простое для анализа