Как правильно использовать строки для создания Python MySQL-запроса? - PullRequest
0 голосов
/ 28 октября 2018

Я пытаюсь написать запрос MySQL на Python, но получаю синтаксическую ошибку # 1064 (42000), когда пытаюсь его выполнить.Данные извлекаются, но ошибка не позволяет завершить запрос.

    mysql.connector.errors.ProgrammingError: 1064
    (42000): You have an error in your SQL syntax; check
    the manual that corresponds to your MySQL server
    version for the right syntax to use near '1
'(data in address_line_1)' NULL '(data in city field)'
'(data in postal code field)' '(data in state code field)' 'US'
(latitude data) (longitude data) '(first two characters of is_active field data)' at line 1

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

Вот создание таблицыКоманда (эта работает, потратив несколько часов на настройку):

    sql=("CREATE TABLE IF NOT EXISTS `locations` ("
"   `id` BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,"
"   `location_id` VARCHAR(48),"
"   `is_valid` BOOLEAN,"
"   `street_line_1` VARCHAR(48),"
"   `street_line_2` VARCHAR(48),"
"   `city` VARCHAR(16),"
"   `postal_code` VARCHAR(8),"
"   `state_code` CHAR(2),"
"   `country_code` CHAR(2),"
"   `latitude` DECIMAL(10,6),"
"   `longitude` DECIMAL(10,6),"
"   `accuracy` VARCHAR(12),"
"   `is_active` BOOLEAN,"
"   `is_commercial` BOOLEAN,"
"   `is_forwarder` BOOLEAN,"
"   `delivery_point` VARCHAR(18),"
"   `last_sale_date` DATE,"
"   `total_value` INT(12)"
")  ENGINE = InnoDB")

Это 17 полей, которые не являются автоматически увеличиваемым ключом идентификатора.Вот фактический запрос вставки:

    sql = ("INSERT INTO `locations`(`location_id`, `is_valid`, `street_line_1`,"
"   `street_line_2`, `city`, `postal_code`, `state_code`, `country_code`,"
"   `latitude`, `longitude`, `accuracy`, `is_active`, `is_commercial`,"
"   `is_forwarder`, `delivery_point`, `last_sale_date`, `total_value`)"
"   VALUES(%s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s)")

Чего мне не хватает?Спасибо за помощь.

Ответы [ 2 ]

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

Полагаю, ваши значения не будут содержать ",", поэтому VALUES (% s% s ....) неверен.Вместо этого вам нужно использовать VALUES (% s,% s, ...).

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

первое предложение для отдельных% s с запятой

 sql = ("INSERT INTO `locations`(`location_id`, `is_valid`, `street_line_1`,"
"   `street_line_2`, `city`, `postal_code`, `state_code`, `country_code`,"
"   `latitude`, `longitude`, `accuracy`, `is_active`, `is_commercial`,"
"   `is_forwarder`, `delivery_point`, `last_sale_date`, `total_value`)"
"   VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)")
...