繁体   English   中英

熊猫to_sql尝试为可空列建立索引

[英]Pandas to_sql Trying to Index Nullable Column

我想设置一个每天将数据转储到SQL表中的作业,以覆盖现有数据。

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

但是,SQLAlchemy在后台尝试使用IdColumn VARCHAR(max)创建表,并且该表可以为空。 因此,SQL在尝试创建索引时会引发错误。

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

如果你想要写索引到SQL表作为一个正常的列,你可以做一个reset_index的前to_sql拨打:

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

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

考虑使用dtype参数,该参数采用将数据帧列名称映射到指定的sqlalchemy数据类型的字典。 您可以尝试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类型,指定长度:

from sqlalchemy.types import String

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM