在Django中使用Pandas to_sql时数据库架构更改

时间:2020-07-28 11:13:42

标签: python django pandas

我正在尝试使用以下代码将数据帧插入到现有的django数据库模型中:

database_name = settings.DATABASES['default']['NAME']
database_url = 'sqlite:///{database_name}'.format(database_name=database_name)
engine = create_engine(database_url)
dataframe.to_sql(name='table_name', con=engine, if_exists='replace', index = False)

运行此命令后,数据库架构也会更改,从而消除了主键并导致以下错误:django.db.utils.OperationalError: foreign key mismatch

注意:熊猫列名称和数据库列匹配。

1 个答案:

答案 0 :(得分:1)

问题似乎出在if_exists='replace'方法中的to_sql参数上。熊猫文档中的内容如下:

if_exists {“失败”,“替换”,“添加”},默认为“失败” 如果该表已经存在,该如何操作。

  • 失败:引发ValueError。

  • 替换:在插入新值之前先删除表。

  • 追加:将新值插入现有表。

如果表已存在,则“ replace”参数将表替换为由预定义架构定义的另一个表。在您的情况下,它将用django迁移创建的表替换为基表,从而丢失了主键,外键和所有键。尝试将'replace'参数替换为'append'。