首页 > 解决方案 > 没有这样的列:dashboard_book.id django

问题描述

我正在尝试将 pandas DataFrame 中的数据保存到 django 项目的 SQLite 数据库中,但我不断收到错误消息“没有这样的列:dashboard_book.id”。

目前我只有一个简单的 Excel 文件,其中有一列“标题”,里面有一个字符串。我想将其导入 DataFrame,然后将其保存到 Django 模型中。这可能看起来有点矫枉过正,但这只是一个开始,因为我想用我已经到位的一些自动化脚本来构建它。

models.py 中的简单模型:

class Book(models.Model):
    title = models.CharField(max_length=500)

admin.py 中的管理员注册:

@admin.register(Book)
class BookAdmin(admin.ModelAdmin):
    list_display = ['title']

然后尝试使用 dataframe.to_sql() 将其保存到数据库中,此调用与其他业务逻辑位于单独的文件中:

data_table = pd.read_excel(setting.import_directory + "/book_table.xlsx")
data_table_dataframe = pd.DataFrame(data_table,)
engine = create_engine('sqlite://db.sqlite3')
data_table_dataframe.to_sql("dashboard_book", con=engine, if_exists='replace', index=True)

尝试在管理面板上访问模型时,收到错误消息,并且没有数据保存到模型中。

首次迁移模型时,该表在数据库中有一个 ID 列和一个标题列。但是,在尝试使用数据框数据加载表后,ID 列消失了。

我在 to_sql() 调用中尝试了所有不同的参数,并检查了文件以确保我没有遗漏任何内容,但我找不到问题出在哪里。

提前致谢。

标签: pythondjangopandas

解决方案


正如约翰在评论中建议的那样 - 这是由于if_exists='replace'. 我将其更改为下面的代码,它可以工作。

data_table_dataframe.to_sql(name="dashboard_book", con=engine, if_exists='append', index=False, index_label=None, method=None)

推荐阅读