【问题标题】:Python to mysql 'Timestamp' object has no attribute 'translate'Python 到 mysql 'Timestamp' 对象没有属性 'translate'
【发布时间】:2017-08-23 19:20:44
【问题描述】:

我正在尝试使用 Sqlalchemy 将 pandas 数据框加载到 mysql 表中。

我使用连接; engine = create_engine("mysql+pymysql://user:password@ip:port/db")

然后我只是在跑步;

df.to_sql(con=engine, name='Table', if_exists='append', index=False, chunksize=10000);

我不断收到错误

AttributeError: 'Timestamp' object has no attribute 'translate'

当我使用旧版本并通过 pymysql 而不是 sqlalchemy 完成此操作时,这工作正常

我在网上找不到任何可以提供帮助的东西,任何想法。

谢谢,

【问题讨论】:

标签: python mysql pymysql


【解决方案1】:

我将 timestamp 对象转换为 ts.to_pydatetime(),然后将其传递给光标,从而解决了属性错误。

有关转换时间戳的不同方法,请参阅此答案: Converting between datetime, Timestamp and datetime64

【讨论】:

    【解决方案2】:

    使用df.dtypes 检查您的数据框的数据类型,并确保您的列是正确的数据类型。如果您希望有一列是时间戳,请确保它的数据类型是datetime64[ns]。如果是object(甚至是别的),你可以使用pandas.to_datetime() 函数来转换它。

    我也遇到了同样的问题。在我的例子中,我试图写一个包含时间戳的列,但它的数据类型是object。使用df[colname] = pd.to_datetime(df[colname]) 转换后,我能够使用 pymysql 驱动程序和 sqlalchemy 成功编写它。

    【讨论】:

      【解决方案3】:

      当我尝试将一个非常大的数据框(df)插入 MySQL 中时遇到了同样的问题,该数据框有一个带有'datetime64[ns]' dtype 的列(df['date_'])。

      date_ 列最初使用pd.to_datetime(df[date_]) 转换为datetime64[ns]。我发现df['date_'] 的数据类型是object 而不是datetime64[ns]。所以,我从表中取出一小块数据进行调试,发现 dtype 是datetime64[ns],这是正确的,甚至数据也被插入到数据库中。因此,肯定有一些行无法转换为datetime64[ns],我认为这是错误背后的原因。

      但是,将此列转换为字符串(如下所示)解决了我的问题。

      df['date_'] = df['date_'].astype(str)
      

      【讨论】:

        【解决方案4】:

        遇到此问题时,我正在使用参数化插入查询。转换为 pd.to_datetime 并没有解决我的问题,但是将 pandas Timestamp 对象转换为 str 效果很好。

        【讨论】:

          【解决方案5】:

          我遇到了同样的问题。发现最好的解决方案是将所有类似时间戳的列转换为字符串。

          df = df.apply(lambda col: col.astype(str) if col.dtype == 'datetime64[ns]' else col)
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2022-01-24
            • 2016-08-24
            • 1970-01-01
            • 2018-10-09
            • 1970-01-01
            • 1970-01-01
            • 2010-10-05
            相关资源
            最近更新 更多