我正在开发基于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而不做任何更改。
有没有解决这个问题的方案?
答案 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!')