使用df.to_sql的方法把处理好数据类型的df追加到sql server的表中,但是还是报错,解决办法是:
通过创建一个类似“{"column_name":sqlalchemy_type}”的映射结构来控制数据库中表的列类型。但在实际使用时,我们更希望能通过pandas.DataFrame中的column的数据类型来映射数据库中的列类型,而不是每此都要列出pandas.DataFrame的column名字。写一个简单的def将pandas.DataFrame中列名和预指定的类型映射起来即可:
def mapping_df_types(df):
dtypedict = {}
for i, j in zip(df.columns, df.dtypes):
if "object" in str(j):
dtypedict.update({i: NVARCHAR(length=255)})
if "float" in str(j):
dtypedict.update({i: Float(precision=2, asdecimal=True)})
if "int" in str(j):
dtypedict.update({i: Integer()})
return dtypedict
df = pd.DataFrame([['a', 1, 1, 2.0, datetime.now(), True]],
columns=['str', 'int', 'float', 'datetime', 'boolean'])
dtypedict = mapping_df_types(df)
df.to_sql(name='test', con=con, if_exists='append', index=False, dtype=dtypedict)