Pandas to \u sql尝试索引可为空的列

2024-09-27 18:01:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望每天都将现有数据转储到一个SQL表中。在

df.to_sql(table_name, engine, schema='dbo', 
          index=True, index_label='IdColumn', 
          if_exists='replace')

然而,在幕后,SQLAlchemy正试图用IdColumn VARCHAR(max)创建一个可以为null的表。所以SQL在尝试创建索引时会抛出一个错误。在

在向表中写入数据之前截断表是非常简单的,但是我觉得应该有一个更优雅的解决方案来解决这个问题。在


Tags: to数据nametruedfsqlindexif
2条回答

考虑使用dtype参数,该参数接受字典将数据帧列名映射到指定的sqlalchemy data types。您可以尝试Varchar

import sqlalchemy

df.to_sql(table_name, engine, schema='dbo', 
          index=True, index_label='IdColumn', 
          if_exists='replace',
          dtype={'IdColumn': sqlalchemy.types.VARCHAR(length=255)})

或泛型String类型,指定长度:

^{pr2}$

如果希望将索引作为普通列写入sql表,可以在to_sql调用之前执行reset_index

df.reset_index().to_sql(table_name, engine, schema='dbo', index=False, if_exists='replace')

唯一的问题是该列的名称,如果要自定义列,则必须首先设置索引名(df.index.name = 'IdColumn')或在reset\u索引后重命名。在

相关问题 更多 >

    热门问题