синтаксический анализ строки Python для данного запроса sql сообщает, читается ли он или записывается - PullRequest
0 голосов
/ 12 октября 2018

Мне дали SQL-запрос, и я должен решить, является ли это оператором записи или оператора чтения.

Я не уверен, как это сделать, и я не могу найти в Интернете ничего, что ужеимеет такую ​​возможность.

Я предполагаю, что единственный способ сделать это, чтобы проверить строку на наличие слов, таких как select против update alter delete insert drop etc...

Но мне придется удалить всеСначала строковые литералы.

def is_write_query(query):
    # returns true or false 
    # strip string literals 
    # if contains key words: 
    #   UPDATE, DELETE, INSERT, CREATE, ALTER, DROP
    # return true, else false

Кто-нибудь знает лучший способ сделать это?Знаете ли вы о пакете, который имеет такую ​​возможность?

Если это лучший способ сделать это, какой самый простой способ обработать разбор строки?Специально зачистка строковых литералов.

1 Ответ

0 голосов
/ 12 октября 2018

Я не знаю лучшего способа, чем вы предлагаете - вам нужно посмотреть на происходящую операцию.Операция всегда будет первым словом в запросе, поэтому вы можете выполнить:

def is_write_query(query): 
    query = query.lower().strip() # to remove trailing and leading whitespace, convert to lowercase 
    if query.startswith(("update","insert","create","alter","delete","drop")): 
        return True 
    else:
        return False 

Возможно, вам придется включить больше ключевых слов, чем я включаю здесь, но это будет общая идея..startswith() может взять кортеж (не список) строки, чтобы попытаться понять, что здесь происходит.

...