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

2024-05-13 21:17:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我陷入了一个似乎非常愚蠢的问题:我同时使用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,但运气不佳。有没有关于如何正确解析它或用零检索值的提示

谢谢


Tags: theonlydatetimeiftimemysqlitemparsed
1条回答
网友
1楼 · 发布于 2024-05-13 21:17:18

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

相关问题 更多 >