Как вставить тип NaT в столбец MySQL datetime, используя executemany - PullRequest
0 голосов
/ 10 марта 2020

У меня df выглядит примерно так

uid | name | txn   | date
 1  |  a   | NaN   | NaT
 2  |  z   | 970.0 | 2016-04-30 17:00:00 

, когда я использую executemany из курсоров MySQLdb, он возвращает

Executemany error while connecting to MySQL (1292, "Incorrect datetime value: 'NaT' for column date at row 1")

Итак, я попытался преобразовать NaT в Нет с df.replace({pd.Nat: None}, inplace=True), теперь он возвращает

Executemany error while connecting to MySQL (1366, "Incorrect integer value: 'None' for column 'txn' at row 1")

Следовательно, мне нужно использовать этот df.replace({pd.NaT: None, np.NaN: None}, inplace=True) вместо этого, но все еще получил

Executemany error while connecting to MySQL (1292, "Incorrect datetime value: 'None' for column 'date' at row 1")

с учетом поведения df.replace

Как я могу решить эту проблему NaT / None Неправильная проблема даты и времени

1 Ответ

1 голос
/ 27 апреля 2020

Я гуглил для решения той же проблемы.

Executemany error while connecting to MySQL (1292, "Incorrect datetime value: 'NaT' for column date at row 1")

То, что я сделал после нескольких часов исследований, чтобы решить, было преобразовать дату и время в строковый тип, а затем запустил функцию замены.

df['date'] = df['date'].astype('str')
df.replace({'NaT': None}, inplace=True)

MySQL взял мой вставить заявление. Надеюсь, это работает и для вас. Также проверьте структуру базы данных, чтобы убедиться, что в столбце «date» допустимы значения Null.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...