You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 00:12:38