在Python中获取MySQL日期时间字段时忽略秒数

在Python中获取MySQL日期时间字段时忽略秒数,python,mysql,python-3.x,parsing,Python,Mysql,Python 3.x,Parsing,我陷入了一个似乎非常愚蠢的问题:我同时使用mysql.connector和MySQLdb来检索一些datetime数据,当我将fetchall()值放在数组中时,我需要解析每一行,但是当datetime有任何“双零”作为秒时,这部分datetime被忽略,解析失败。以下是场景: mycursor.execute("select arrival_time from queue_element where status='Pending'") arrival = mycursor.fetchall(

我陷入了一个似乎非常愚蠢的问题:我同时使用mysql.connector和MySQLdb来检索一些datetime数据,当我将fetchall()值放在数组中时,我需要解析每一行,但是当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'
试图玩datetime,但运气不佳。有没有关于如何正确解析它或用零检索值的提示


谢谢

我认为一个简单的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)

当您将
str()
应用于
datetime
实例时,它只返回“数字”,因此
replace()
方法没有意义。我曾考虑过使用if语句,但无法像处理项[0]那样到达最后一个元素。第二。很有魅力,谢谢!