Секунды игнорируются при получении поля даты и времени MySQL в Python - PullRequest
0 голосов
/ 10 октября 2019

Я застрял в том, что кажется очень глупой проблемой: я использую оба mysql.connector и MySQLdb для извлечения некоторых данных даты и времени, когда я выбираю значения () для помещения их в массив, мне нужно проанализироватьв каждой строке, но когда у datetime есть «двойные нули» в виде секунд, эта часть datetime игнорируется, и мой анализ завершается неудачно. Вот сценарий:

mycursor.execute("select arrival_time from queue_element where status='Pending'")
arrival = mycursor.fetchall()

скажем, он возвращает две строки:

>> arrival
>> [(datetime.datetime(2019, 10, 7, 2, 45, 48),), (datetime.datetime(2019, 10, 7, 2, 46),)]
In the database:

2019-10-07 02:45:48 
2019-10-07 02:46:00

Так что, когда я пытаюсь проанализировать его с datetime.datetime, строки, которые имеют только 5 значений, ссекунды игнорируются вместо того, чтобы отображаться как 00, сбой и мой код ломается. Вот как я пытаюсь добиться этого:

for item in arrival:
    arrival_parsed = str(item).replace("(datetime.datetime(", "") # extracts only the numbers
    arrival_parsed = str(arrival_parsed).replace("),)", "") # extracts only the numbers
    arrival_parsed = str(datetime.strptime(arrival_parsed,'%Y, %m, %d, %H, %M, %S')) # works fine if seconds != 00, breaks if equal
The error:

ValueError: time data '2019, 10, 7, 2, 46' does not match format '%Y, %m, %d, %H, %M, %S'

Пытался играть с датой и временем, но безуспешно. Любые советы о том, как правильно его проанализировать или получить значение с нулями?

Спасибо!

1 Ответ

1 голос
/ 10 октября 2019

Я думаю, что простое условие if-else может помочь. Попробуйте ввести следующий код:

from datetime import datetime
arrival = [(datetime(2019, 10, 7, 2, 45, 48),), (datetime(2019, 10, 7, 2, 46),)]

for item in arrival:
  if item[0].second != 0:
    arrival_parsed = str(item).replace("(datetime.datetime(", "") # extracts only the numbers
    arrival_parsed = str(arrival_parsed).replace("),)", "") # extracts only the numbers
    arrival_parsed = str(datetime.strptime(arrival_parsed,'%Y, %m, %d, %H, %M, %S'))
    print(arrival_parsed)
  else:
    arrival_parsed = str(item).replace("(datetime.datetime(", "") # extracts only the numbers
    arrival_parsed = str(arrival_parsed).replace("),)", "") # extracts only the numbers
    arrival_parsed =  arrival_parsed + ", 0"
    arrival_parsed = str(datetime.strptime(arrival_parsed,'%Y, %m, %d, %H, %M, %S'))
    print(arrival_parsed)
...