Streamlit应用中MySQL存储的Selenium爬取数据时间格式异常问题
解决Streamlit中MySQL时间格式显示异常的问题
核心原因
从MySQL读取的datetime/timestamp字段,在Python中会被转为datetime对象,Streamlit默认的显示格式和数据库原生格式不符;另外st.table对pandas Styler的支持有限,这也是你用st.table(styler)没效果的原因。
具体解决方案
方案1:SQL查询时直接格式化时间
在查询语句里用MySQL的DATE_FORMAT函数,直接把时间转成你需要的格式字符串,拿到的数据直接就是正确格式,无需后续处理:SELECT DATE_FORMAT(departure_time, '%Y-%m-%d %H:%i:%s') AS departure_time, DATE_FORMAT(arrival_time, '%Y-%m-%d %H:%i:%s') AS arrival_time, -- 其他字段 FROM your_table;方案2:用Pandas格式化datetime对象
如果已经拿到包含datetime对象的DataFrame,先转换格式再展示:import pandas as pd import streamlit as st # 假设df是从MySQL读取的DataFrame df['departure_time'] = df['departure_time'].dt.strftime('%Y-%m-%d %H:%i:%s') df['arrival_time'] = df['arrival_time'].dt.strftime('%Y-%m-%d %H:%i:%s') # 直接展示 st.dataframe(df)方案3:正确使用Pandas Styler+Streamlit
如果你一定要用Styler,别用st.table,改用st.dataframe——因为st.table对Styler的样式支持不完善:styler = df.style.format({ 'departure_time': lambda x: x.strftime('%Y-%m-%d %H:%i:%s'), 'arrival_time': lambda x: x.strftime('%Y-%m-%d %H:%i:%s') }) st.dataframe(styler)额外检查:MySQL连接参数
确保Python连接MySQL时,时间字段被正确解析为datetime对象。比如用pymysql的话,连接时可以设置:import pymysql conn = pymysql.connect( host='your_host', user='your_user', password='your_pwd', database='your_db', cursorclass=pymysql.cursors.DictCursor, convert_unicode=True )
内容的提问来源于stack exchange,提问作者Vivek Duggal
相关产品推荐
相关产品推荐

