【问题标题】:Can we define django model from csv file or pandas dataframe?我们可以从 csv 文件或 pandas 数据框定义 django 模型吗?
【发布时间】:2017-07-03 14:57:36
【问题描述】:

我在 csv 文件中有 200 多列,想在 django 模型中定义 Class。

但我真的找不到一些从 csv 文件创建 django 模型的说明(第一行表示列)

有没有办法从 csv 文件或 pandas 数据框定义 django 模型?

【问题讨论】:

  • 我认为你会遇到困难,因为定义 Django 模型需要指定类型,而仅凭名称是无法做到的。
  • 我猜python pandas可以给出一些提示,因为它们会自动识别变量的类型。
  • Django 模型中有太多内容,无法以可靠的方式从原始 csv 文件创建 - 即使您有来自 panda 的类型提示(除非该 csv 文件是专门编写的以完全描述当然是一个 Django 模型,但我认为这不是你在这里所说的)。想想 char 字段的最大长度、选择限制、最小/最大/任何验证等)。您可以期待的最好的结果是一个一次性脚本,它将创建您的 models.py 骨架,但无论如何您都必须手动编辑它。
  • 谢谢!这很有帮助。我可能会创建一个开源项目来轻松完成它:)

标签: python django csv


【解决方案1】:

我根据以下代码生成文本以供模型使用

import numpy as np

for col in speech_data.columns:
    arr = speech_data[col]

    size = 0
    value = ""
    for ar in arr:
        if len(str(ar)) > size:
            size = len(str(ar))
            value = ar

    print col, size, type(speech_data.iloc[0][col]), ar

    if type(speech_data.iloc[0][col]) == np.int64:
        print col + " = " + "models.IntegerField()"

    elif type(speech_data.iloc[0][col]) == str:
        print col + " = " + "models.CharField(max_length="+ str(size+3) +")"

    elif type(speech_data.iloc[0][col]) ==  np.float64:
        print col + " = " + "models.FloatField(null=True, blank=True, default=None)"    
    elif type(speech_data.iloc[0][col]) ==  np.bool_:
        print col + " = " + "models.BooleanField()"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-06
    • 1970-01-01
    • 2012-01-30
    • 1970-01-01
    • 1970-01-01
    • 2018-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多