Запрос вставки Python-Mysql

#python #null #sql-insert #mysql-python #mysql-error-1064

#python #null #sql-вставка #mysql-python #mysql-ошибка-1064

Вопрос:

Я пытаюсь вставить значения в базу данных MYSQL, используя код python, но изо всех сил пытаюсь исправить ошибку, хотя код ошибки звучит знакомо.

Мой запрос выглядит следующим образом

запрос=»вставить в историю случаев (Patient_id, Patient_name, Gender, Dob, Address, Phone_no , Occupation, Date_entered) значения (%d, %s, %s, %s, %s, %s, %s, %s, %s)»

cur.execute(запрос, (3, ‘myname’, ‘Male’, ‘2000-12-11’, Нет, ‘123’, «, ‘2020-11-12 19:49:21’))

Ошибка программирования: 1064 (42000): у вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса для использования рядом с ‘%d, %s, %s, %s, %s, %s, %s, %s)’в строке 1

Patient_id является целым числом в соответствии с определением таблицы. Также в таблице есть столбец с номером строки, для которого установлено значение автоинкремент, поэтому я исключил номер строки из запроса.

Я следил за сообщением здесь и здесь, но не смог найти основную причину. Я понял, что я могу отправлять нулевые значения из Python в MYSQL, используя ключевое слово None, но оно не работает. Если я изменю запрос, как показано ниже, он будет работать, но при этом NULL не будет вставляться в таблицу.

запрос= «вставить в Case_history (Patient_id, Patient_name, Gender, Dob, Address, Phone_no, Occupation, Date_entered) значения (3, ‘мое имя’, ‘Мужчина’, ‘2000-12-11’, «, ‘123’, «, ‘2020-11-12 19:49:21’))

cur.execute(запрос)

Я использую Python 3.7. Любая помощь будет оценена!

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

1. Я не нашел способа решить эту проблему, и поэтому я решил указать пробел в своей таблице вместо NULL. Это будет стоить некоторого места сейчас и в будущем, если таблица будет расти.

Ответ №1:

Вы должны использовать %s в качестве заполнителя для всех типов данных в вашем скрипте Python / таблице MySQL, а не только для строковых литералов:

 query = """INSERT INTO Case_history (Patient_id, Patient_name, Gender, Dob, Address,
                                     Phone_no, Occupation, Date_entered)
VALUES (%s, %s, %s, %s, %s, %s, %s, %s)"""
vals = (3, 'myname', 'Male', '2000-12-11', None, '123', '', '2020-11-12 19:49:21')
cur.execute(query, vals)
  

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

1. Тим, я тоже пробовал это, и все равно это не удалось в той же позиции запроса.

Ответ №2:

Мне удалось вставить записи без параметров %S.

** Вставить в table_name значения (строка значений кортежа) **

Также изменен тип данных столбцов в таблице как varchar.