mysql.connector.ошибки.Ошибка программирования: 1064 (42000) — Создание локального зеркала NVD

#python #mysql #syntax-error

Вопрос:

Я создаю локальное зеркало файлов уязвимостей, размещенных в NVD.

Мой код в настоящее время подключается к базе данных, выполняет проверку, чтобы удалить текущие файлы, а затем переходит к циклическому просмотру этих файлов, чтобы узнать, есть ли внутри них новые данные CVE .файлы json ежедневно.

Сегодня утром я начал получать следующую ошибку, когда мой код выполнял циклическую проверку обновлений отдельных данных CVE.

_mysql_коннектор.Ошибка MySQLInterfaceError: У вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, на наличие правильного синтаксиса для использования рядом с» ГДЕ ID = «CVE-2014-4611» в строке 1.

Во время обработки вышеуказанного исключения произошло еще одно исключение:

Обратная связь (последний последний вызов): Файл «c….2_add_cvestodb.py», строка 134, в mycursor.execute(sql_update_query, val_update_query)

Ниже приведен соответствующий блок кода.

 if newtimesplit > oldtimesplit : 
   print("It's newer!")
   sql_update_query = ("UPDATE vulns set Assigner = %s, Reference1 = %s, Reference2 = %s, Reference3 = %s, Description = %s, impactBaseScore = %s, LastModifiedDate = %s, baseSeverity = %s, cveTimeStamp = %s, WHERE ID = %s")
   val_update_query = (Assigner, Reference1, Reference2, Reference3, Description, impactBaseScore, LastModifiedDate, baseSeverity, cveTimeStamp, ID)

   mycursor.execute(sql_update_query, val_update_query)

   mydb.commit()
   updateCtr  =1
 

Фрагмент ключевого значения .json, который вызывает проблемы:

 {
    "cve" : {
      "data_type" : "CVE",
      "data_format" : "MITRE",
      "data_version" : "4.0",
      "CVE_data_meta" : {
        "ID" : "CVE-2014-4611",
        "ASSIGNER" : "cve@mitre.org"
      },
 

Любые предложения были бы очень признательны — я просмотрел и не могу найти решение.

Ответ №1:

Этот:

 cveTimeStamp = %s, WHERE ID = %s
 

Должно быть:

 cveTimeStamp = %s WHERE ID = %s
 

Удалите последнюю запятую перед WHERE .

Комментарии:

1. это была именно моя проблема. Спасибо! Я добавил новый столбец в свою таблицу и, должно быть, совершенно упустил из виду добавление закрывающей запятой для значений. Спасибо!