【问题标题】:data isn't importing in mysqldb using django import export数据未使用 django import export 在 mysqldb 中导入
【发布时间】:2021-04-04 08:59:37
【问题描述】:

我是 Django 的新手。我正在尝试使用 Django import-export 将 excel 表导入 MySQL dB 表。我遵循了有关导入的文档。尝试测试数据导入时出错。

以下是我的观点:

from django.shortcuts import render
from pathlib import Path
import os
from .resources import ProductsResource
from tablib import Dataset



def home(requests):
    dataimport()
    return render(requests,'dbapp/index.html')

def dataimport():

        products_resource = ProductsResource()
        dataset = Dataset()

        dirname = Path(__file__).resolve().parent.parent
        file_name = 'Price.xlsx'
        file_location = os.path.join(dirname, file_name)
        df = pd.read_excel(file_location, header=1, usecols='A:F')
        
        dataset.load(df)
        result = product_resource.import_data(dataset, dry_run=True, raise_errors=True) # Test the data import
        print(result.has_errors())
        if not result.has_errors():
           products_resource.import_data(dataset, dry_run=False)  # Actually import now

资源.py:

from import_export import resources
from .models import  Products

class ProductsResource(resources.ModelResource):
    class Meta:
        model = Products

模型.py:

from django.db import models
from django.db.models.fields import DateField

class Products(models.Model):
    date = models.DateField(auto_now_add=False,auto_now=False)
    salt = models.FloatField()
    oil = models.FloatField()
    honey = models.FloatField()
    butter = models.FloatField()
    milk = models.FloatField()

我的 excel 文件如下所示:

    Date    Salt    Oil     Honey   Butter  Milk
2020-1-1    26.5    106.5   281     387.5   83
2020-1-2    26.2    106.2   279.8   386     82.4
2020-1-3    26      106     279     385     82
2020-1-4    25      105     275     380     80
2020-1-5    26.2    106.2   279.8   386     82.4
2020-1-6    26.1    106.1   279.4   385.5   82.2

错误信息:

IntegrityError at /
(1048, "Column 'date' cannot be null")
Request Method: GET
Request URL:    http://127.0.0.1:8000/
Django Version: 3.1.7
Exception Type: IntegrityError
Exception Value:    
(1048, "Column 'date' cannot be null")
Exception Location: C:\Users\shash\.virtualenvs\DBProjectWorkspace-IwiT3tz3\lib\site-packages\django\db\backends\mysql\base.py, line 78, in execute
Python Executable:  C:\Users\shash\.virtualenvs\DBProjectWorkspace-IwiT3tz3\Scripts\python.exe
Python Version: 3.9.2

【问题讨论】:

    标签: django django-import-export


    【解决方案1】:

    请您再次使用raise_errors=True 运行并返回错误消息。您可以按如下方式调用更改代码。

    result = products_resource.import_data(dataset, dry_run=True, raise_errors=True)
    

    您可以编辑现有问题以包含错误消息,而不是在新帖子中回复。

    我的猜测是你的csv中的字段名称与模型字段名称不匹配,然后当无法使用空值创建记录时会引发错误。

    如果是这种情况,那么您可以更改 csv 标头名称以使其与模型字段名称匹配:Salt 变为 salt,或者在 ModelResource 中声明每个字段,以便列和 csv字段匹配,例如

    name = Field(attribute="salt", column_name="Salt")
    

    不过,这只是猜测,可能还有其他问题。

    如果您是 Django 新手,那么我强烈建议您使用像 PyCharm 这样的 IDE,然后设置调试器。这意味着您可以逐行执行程序,并准确了解问题所在。这样做可以学到很多东西,而且比在 SO 上提问要快得多。

    另外,我建议将你的 Django 模型命名为 singular form rather than plural,所以 Product 而不是 Products

    【讨论】:

    • 字段名称不匹配是问题所在。感谢您为我指明正确的方向
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-07-18
    • 2020-12-09
    • 1970-01-01
    • 1970-01-01
    • 2015-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多