【问题标题】:Import data from a CSV file without id as column从没有 id 作为列的 CSV 文件导入数据
【发布时间】:2021-09-17 17:48:55
【问题描述】:

我想知道是否可以导入数据,但表中没有名为 id

的列

我的导入对包含 column id 的每个表都很好,但对于不包含列 id 的表则不起作用。我得到一个 row_error 说: Error: 'id'

模型无法导入

class CustomizingObject(models.Model):
    code = models.CharField(max_length=40, primary_key=True, unique=True, help_text="Human readable code")

我的功能

from import_export import resources

lo_resource = resources.modelresource_factory(model=lo_resource_to_import)() # lo_resource_to_import is the model
with open(lv_local_filename, 'r', encoding='utf-8') as f:
    csv_data = f.read()
    lt_dataset = tablib.Dataset().load(csv_data, 'csv')

result = lo_resource.import_data(lt_dataset, dry_run=True)
if not result.has_errors():
    result = lo_resource.import_data(lt_dataset, dry_run=False)
    Logger.Info("import", 2) # Import over
else :
    Logger.Error("import", 3, lv_local_filename) # Input file {} has error
    for ld_error in result.row_errors():
        Logger.Error("import", 5, ld_error[1][0].error) # Error: {}

【问题讨论】:

  • 您必须在脚本中设置PrimaryKey 字段。如果您使用流行的图书馆,请在其文档中搜索。
  • edit你的问题显示你正在使用的代码
  • 我已经编辑了这个问题,我正在使用来自 Django 的资源。

标签: python python-3.x django csv export-to-csv


【解决方案1】:

Django 提供了一个import_id_fields,所以我们可以指定我们想要导入的字段。没有它,它总是寻找一个字段ID

解决方案是用resources.ModelResource 封装我的类并指定import_id_fields

class CustomizingObjectResource(resources.ModelResource):

    class Meta:
        model = CustomizingObject
        import_id_fields = ('code',)
        fields = ('code')

我的功能

# specific is a parameter of my function here specific = CustomizingObjectResource
if specific is not None:
    lo_resource = specific()
else:
    lo_resource = resources.modelresource_factory(model=lo_resource_to_import)()
with open(lv_local_filename, 'r', encoding='utf-8') as f:
    csv_data = f.read()
    lt_dataset = tablib.Dataset().load(csv_data, 'csv')

result = lo_resource.import_data(lt_dataset, dry_run=True)
if not result.has_errors():
    result = lo_resource.import_data(lt_dataset, dry_run=False)
    Logger.Info("import", 2) # Import over
else :
    Logger.Error("import", 3, lv_local_filename) # Input file {} has error
    for ld_error in result.row_errors():
        Logger.Error("import", 5, ld_error[1][0].error) # Error: {}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-30
    • 2012-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-22
    相关资源
    最近更新 更多