如何在psycopg2中正确查询并将日期时间转为可写入谷歌表格的格式
解决psycopg2查询结果中日期时间对象转字符串的问题
有两种可行的解决方式,你可以根据需求选择:
方式一:在SQL查询中直接格式化(推荐)
利用PostgreSQL的内置函数to_char,直接在查询时将日期、时间类型转为目标格式的字符串,这样获取到的结果无需额外处理:
修改后的查询代码:
with connection.cursor() as cursor_6: query = """ SELECT to_char(date, 'YYYY-MM-DD'), to_char(time, 'HH24:MI:SS'), source, object, hostname, mac_address, serial_number, worker, owner, redirect, plata_no_repair, plata_removed, model FROM chronology_filter; """ cursor_6.execute(query) chronology_filter = cursor_6.fetchall()
to_char(date, 'YYYY-MM-DD')将日期转为年-月-日格式的字符串to_char(time, 'HH24:MI:SS')将时间转为24小时制的时:分:秒格式的字符串
方式二:在Python中处理查询结果
如果不想修改SQL,可以遍历查询结果,对每个元素的类型进行判断,将datetime.date和datetime.time对象转为字符串:
修改后的代码:
from datetime import date, time with connection.cursor() as cursor_6: cursor_6.execute("SELECT date, time, source, object, hostname, mac_address, serial_number, worker, owner, redirect, plata_no_repair, plata_removed, model FROM chronology_filter;") chronology_filter = cursor_6.fetchall() # 处理结果 processed_results = [] for row in chronology_filter: processed_row = [] for item in row: if isinstance(item, date): processed_row.append(str(item)) # 转为'YYYY-MM-DD'格式 elif isinstance(item, time): processed_row.append(str(item)) # 转为'HH:MM:SS'格式 else: processed_row.append(item) processed_results.append(tuple(processed_row)) # 保持元组格式,也可转成列表
如果需要自定义格式,可替换为strftime方法,比如item.strftime('%Y-%m-%d')(日期)、item.strftime('%H:%M:%S')(时间)。
内容的提问来源于stack exchange,提问作者Alexey
相关产品推荐
相关产品推荐

