Python / Sqlite3: возникла исключительная ситуация: sqlite3.OperationalError - PullRequest
0 голосов
/ 11 декабря 2018

Я пытаюсь создать функцию, которая будет обрабатывать сообщения об ошибках API, но я получаю это сообщение об ошибке в Python:

Exception has occurred: sqlite3.OperationalError
near "Test4": syntax error

Ответ сервера:

{"message":"Failed to validate one or more request parameters","validationErrors":["Budget name must be unique. 'Test4 - X4574747-PHONE' already exits"]}

Имой код:

def error():
    if "message" in r.json():
        logText = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()) + " : " + r.json()['message']
        c.execute("INSERT INTO log VALUES ('"+ logText +"')")
        conn.commit()
        if "validationErrors" in r.json():
            logText = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()) + " : " + r.json()['validationErrors'][0]
            c.execute("INSERT INTO log VALUES ('"+ logText +"')")
            conn.commit()
        os._exit(1)

Я не могу понять, что вызывает эту ошибку.Любая помощь будет оценена.Спасибо.

1 Ответ

0 голосов
/ 11 декабря 2018
logText = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()) + " : " + r.json()['validationErrors'][0]
c.execute("INSERT INTO log VALUES ('"+ logText +"')")

Вы отправляете этот SQL INSERT INTO log VALUES ('2018-12-10 23:31:26 : Budget name must be unique. 'Test4 - X4574747-PHONE' already exits') и, как видите, закрываете кавычку ' до Test4, и поэтому SQL не понимает, что происходит после закрывающей кавычки.

Использование c.execute("INSERT INTO log VALUES (?)", [logText])

Код Дана работает, но я его не понимаю.

? означает передачу аргумента из данного списка аргументов,Который [logText].Лучше использовать этот способ, чтобы избежать SQL-инъекций.

См. здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...