我正在尝试使用以下代码将数据帧插入到现有的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
注意:熊猫列名称和数据库列匹配。
答案 0 :(得分:1)
问题似乎出在if_exists='replace'
方法中的to_sql
参数上。熊猫文档中的内容如下:
if_exists {“失败”,“替换”,“添加”},默认为“失败” 如果该表已经存在,该如何操作。
失败:引发ValueError。
替换:在插入新值之前先删除表。
追加:将新值插入现有表。
如果表已存在,则“ replace”参数将表替换为由预定义架构定义的另一个表。在您的情况下,它将用django迁移创建的表替换为基表,从而丢失了主键,外键和所有键。尝试将'replace'参数替换为'append'。