#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.