【问题标题】:datetime confusing when pd.DataFrame to SQL Server INSERT当 pd.DataFrame 到 SQL Server INSERT 时,日期时间令人困惑
【发布时间】:2020-09-30 14:21:06
【问题描述】:

pd.DataFrame 具有 Date 列(具有 datetime 数据类型),其样式如下: %dd.%mm.%yyyy #for example 03.08.2020 但在插入到 SQL Server 之后 df.to_sql(con_param) 结果导致 RDB 看起来像 08.03.2020 而不是 03.08.2020。 问题不是线性的,例如 31.07.2020 看起来像 31.07.2020。 数据库的本地是 SQL_Latin1_General_CP1_CI_AS。 怎么了? UPD 到 sql 块仅供参考

correct_df = pd.read_csv(path)
correct_df = correct_df.astype({
                           'Req_Date': 'datetime64', 'Date': 'datetime64'})
                           
 correct_df.to_sql(con=conn, name='table', schema='schema', if_exists='append', index=False)

【问题讨论】:

  • 日期没有样式或格式,它们是二进制值。 在日期转换为字符串时才应用格式,反之亦然。您的代码正在某处将日期转换为字符串 - 或者根本没有问题,并且您的客户端工具在您的语言环境中显示日期 - 德语?俄语?
  • 您在此处实际陈述的所有内容实际上都没有多大意义。日期和时间数据类型(在 SQL Server 中)没有 any 格式;它们存储为二进制值。如果您将日期和时间值作为字符串(不是明确的)插入,然后在与 SQL Server 无关的 表示层 中获取不同的值和/或格式。问题在于用于插入数据的格式不明确,以及表示层中的格式选择。
  • 在解析 CSV 的日期字段时,您可能应该使用具有特定格式的 pd.to_datetime
  • 你确定吗?您是否 100% 确定您的用户区域设置与 CSV 文件中日期字符串的格式匹配?您是否尝试过使用显式格式的to_datetime?您尚未发布任何示例数据,因此最可能的解释是格式不匹配。 CSV 文件中的日期是什么样的?
  • Cause my DataFrame['Date'] cells are datetime64 如果使用 错误 格式进行解析,则意义不大

标签: python sql sql-server pandas datetime


【解决方案1】:

因此,感谢 Panagiotis Kanavos 的消息。 如果您遇到这样的问题,您必须在 DateFrime 中设置 csv 日期字符串的格式。 例如

df['Date'] = pd.to_datetime(df['Date'], format='%d.%m.%Y') #format=f'{your_date_style}'

它可以工作。它对我有用。

【讨论】:

    猜你喜欢
    • 2019-05-28
    • 2010-12-23
    • 2021-07-18
    • 1970-01-01
    • 2011-10-31
    • 1970-01-01
    • 2011-04-23
    • 1970-01-01
    • 2013-01-06
    相关资源
    最近更新 更多