вставка нулевых дат в MySql с помощью pymysql

0

Я пытаюсь вставить даты в базу данных MySql, используя pymysql и параметры. В некоторых строках есть поле даты, но для некоторых других отсутствует конкретное поле даты. Пустые строки выдают ошибку типа "pymysql.err.InternalError: (1292," Неверное значение даты: ". Ниже приведен фрагмент кода, который воспроизводит ошибку:

import pymysql
db=pymysql.connect("localhost","testuser","test1234","TESTDB")
cursor = db.cursor()
cursor.execute("SELECT VERSION()")
data = cursor.fetchone()
print ("Database version : %s " % data)

query = "DROP TABLE IF EXISTS birthdays"
cursor.execute(query)

query="CREATE TABLE birthdays(id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,\
name VARCHAR(20),\
birthday DATE NULL DEFAULT NULL)"
cursor.execute(query)
db.commit()

birthdays={'David':'2014-05-22','Larry':'014-05-22', 'Barry':''}

for k,v in birthdays.items():
    print(k,v)
    query="INSERT INTO birthdays (name,birthday) VALUES ('%s','%s')"%(k,v)
    cursor.execute(query)
    db.commit()

db.close()

Проблема в том, что Барри и его пустая дата. Я пробовал установить дату Barry на None, но он не работает. Если я настроил его на "NULL" и удалил цитаты из параметра даты (("% s",% s) вместо ("% s", "% s")), он работает для Барри, но заметьте для остальных,

заранее большое спасибо,

Габриэль Видал

Теги:
date
null

1 ответ

0

Вы можете использовать приведенный ниже код. Я только что изменил ваш массив и установил "Barry": None, потому что, используя mysqldb и cursor.execute(), передайте значение None:

birthdays={'David':'2014-05-22','Larry':'014-05-22', 'Barry':None}

for k,v in birthdays.items():
    print(k,v)
    query="INSERT INTO birthdays (name,birthday) VALUES ('%s','%s')"%(k,v)
    cursor.execute(query)
    db.commit()

db.close()

Для более подробной информации здесь

  • 0
    Привет, спасибо, однако это не сработало для меня. Что сработало, так это передача значений в виде кортежа в качестве аргументов в cursor.execute (query, args)
  • 0
    Здравствуйте, @ user1862963. Можете ли вы попробовать: cursor.execute («ВСТАВИТЬ В ДЕНЬ РОЖДЕНИЯ (имя, день рождения) ЗНАЧЕНИЯ ('% s', '% s')", (k, v))
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню