Python到mysql'Timestamp'对象没有属性'translate'

时间:2017-03-30 03:45:01

标签: python mysql

我正在尝试使用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

执行此操作时,此功能正常

我找不到任何在线帮助,任何想法。

感谢,

5 个答案:

答案 0 :(得分:1)

使用df.dtypes检查数据框的数据类型,并确保列是正确的数据类型。如果您希望列为时间戳,请确保其数据类型为datetime64[ns]。如果它是object(甚至是其他东西),您可以使用pandas.to_datetime()函数进行转换。

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

答案 1 :(得分:1)

我将 timestamp 对象转换为SomeRoot,然后将其传递给光标,这解决了属性错误。

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

当我尝试将非常大的数据帧(df)插入到MySQL中,该数据帧的列(df['date_'])的类型为'datetime64[ns]'时,我遇到了相同的问题。

最初使用datetime64[ns]将date_列转换为pd.to_datetime(df[date_])。我发现df['date_']的数据类型是object而不是datetime64[ns]。因此,我从表中取出了一小部分数据进行调试,发现dtype是datetime64[ns],这是正确的,甚至数据也已插入数据库中。因此,肯定有一些行未能转换为datetime64[ns],我认为这是导致错误的原因。

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

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

答案 4 :(得分:0)

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

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