将CSV导入Postgresql

时间:2017-11-22 09:08:38

标签: django postgresql csv

我正在开发基于Django的Web应用程序。

我要将csv导入postgresql数据库,该数据库有超过100,000行,并将其用作Django应用程序的数据库。 在这里,我遇到了两个问题。 字段名称包含如下特殊字符:

%oil, %gas, up/down, CAPEX/Cash-flow, D&C Cape,...

1,如何定义Postgresql数据库的字段名称以导入csv?

2,导入后,我将通过django模型获取数据。那我该如何定义包含特殊字符的Django模型变量名呢?

当然,如果我更改包含特殊字符的csv的列名,我可以,但我不想更改它。我想导入原始csv而不做任何更改。

有没有解决这个问题的方案?

1 个答案:

答案 0 :(得分:1)

您的示例中没有特殊字符。从python或数据库的角度来看,至少没有任何问题。

首先,避免使用可疑的字段名称,特别是在财务方面。 %oil可能意味着石油份额,石油边际或其他。定义具有有意义名称的模型,如

class FinancialPeformanceData(models.Model):

     oil_share = models.DecimalField(max_digits=5, decimal_places=2)
     gas_share = models.DecimalField(max_digits=5, decimal_places=2)
     growth = models.DecimalField(max_digits=10, decimal_places=2)
     capex_to_cf = models.DecimalField(max_digits=7, decimal_places=2)
     ... etc.

然后您使用copy从@Hambone建议的CSV导入数据。您不需要CSV文件中的标题。

def import_csv(request):

    file = './path/to/file'
    with open(file, 'rb') as csvfile:
          with closing(connections['database_name_from_settings'].cursor()) as cursor:
                cursor.copy_from(
                    file=csvfile,
                    table='yourapp_financialperformancedata', #<-- table name from db
                    sep='|',  #<-- delimiter
                    columns=(
                        'oil_share',
                        'gas_share',
                        'growth',
                        'capex_to_cf',
                        ... etc.
                    ),
            )

    return HttpResponse('Done!')