如何将pyodbc.Row对象转换为datetime标量或指定格式的时间字符串?
解决pyodbc查询SQL Server datetime列的格式问题
我之前也碰到过一模一样的情况,pyodbc返回的pyodbc.Row初看确实有点让人困惑,但其实处理起来很简单,给你几个实用的方案:
方案1:提取datetime对象后格式化字符串
首先得明确:pyodbc.Row里的元素本身就是Python的datetime.datetime对象,你看到的(datetime.datetime(2017, 3, 20, 8, 0), )只是它的打印表现形式。你只需要先把它从行对象里取出来,再用strftime方法转成你要的格式:
import pyodbc import datetime # 假设你已经完成连接和游标初始化 cursor = conn.cursor() cursor.execute("SELECT your_datetime_column FROM your_table WHERE ...") row = cursor.fetchone() # 从行对象中提取datetime对象 dt_obj = row[0] # 格式化为指定的字符串格式 formatted_date = dt_obj.strftime("%Y-%m-%d %H:%M") print(formatted_date) # 输出: 2017-03-20 08:00
方案2:在SQL层面直接返回格式化后的字符串
如果你不需要在Python里处理datetime对象,只想直接拿到指定格式的字符串,可以在SQL查询时用CONVERT函数提前完成格式化:
SELECT CONVERT(varchar, your_datetime_column, 120) AS formatted_date FROM your_table WHERE ...
这里的120是SQL Server的格式代码,对应yyyy-mm-dd hh:mi:ss的格式,刚好匹配你的需求。查询后直接从pyodbc.Row里取出字符串即可使用。
方案3:直接使用原生datetime对象
如果你的后续操作需要用到datetime对象(比如做时间比较、加减计算),那完全不需要额外转换,直接提取出来用就行:
dt_obj = row[0] # 示例:判断时间是否在指定范围 if dt_obj > datetime.datetime(2017, 1, 1): print("该时间在2017年之后")
内容的提问来源于stack exchange,提问作者Róbert Péczi
相关产品推荐
相关产品推荐

