我正在尝试使用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
执行此操作时,此功能正常我找不到任何在线帮助,任何想法。
感谢,
答案 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)