注意:向下滚动到背景部分以获取有用的详细信息。假设该项目使用Python-Django和South,如下图所示。
导入以下CSV的最佳方式是什么
"john","doe","savings","personal"
"john","doe","savings","business"
"john","doe","checking","personal"
"john","doe","checking","business"
"jemma","donut","checking","personal"
考虑到
,使用相关表 Person , Account 和 AccountType 进入PostgreSQL数据库>到目前为止,已经考虑了两种方法
我实现了第二种方法,但我正在努力解决算法缺陷和代码复杂性问题。是否有一个python ETL API可以满足我的需求?或者一种不涉及重新发明轮子的方法?
背景
我所在的公司正在寻求将sharepoint中托管的数百个项目特定设计电子表格移动到数据库中。我们即将完成满足需求的Web应用程序,允许管理员为每个项目定义/建模数据库,在其中存储电子表格,以及定义浏览体验。在这个完成阶段,过渡到商业工具不是一种选择。将Web应用程序视为django-admin备选方案,尽管它不具备数据库建模UI,CSV导入/导出功能,可自定义浏览和模块化代码,以解决项目特定的自定义问题。
实施的CSV导入界面很麻烦且有问题,所以我试图获得反馈并找到替代方法。
答案 0 :(得分:2)
如何将问题分成两个独立的问题?
创建一个代表数据库中人员的Person
类。这可以使用Django的ORM,或者扩展它,或者你可以自己做。
现在你有两个问题:
Person
实例。Person
实例保存到数据库。现在,您不再使用CSV到数据库,而是拥有CSV到人员和人员到数据库。我认为这在概念上更清洁。当管理员更改架构时,会更改“人员到数据库”端。当管理员更改CSV格式时,他们正在更改CSV到数据库端。现在你可以单独处理每个。
这对你有帮助吗?
答案 1 :(得分:0)
我几乎每个月都会在工作中编写导入子系统,因为我做了那么多我以前写过的任务django-data-importer。此导入器的工作方式类似于django表单,并且具有CSV,XLS和XLSX文件的读者,可以为您提供dicts列表。
使用data_importer阅读器,您可以将文件读取到dicts列表,iter就可以使用for和save line do DB。 使用导入器,您可以执行相同操作,但可以验证每个行的字段,记录错误和操作,并在结束时保存它。
请看一下https://github.com/chronossc/django-data-importer。我很确定它会解决你的问题,并且从现在起将帮助你处理任何类型的csv文件:)
为了解决您的问题,我建议将数据导入器与芹菜任务一起使用。您可以通过简单的界面上传文件并触发导入任务。 Celery任务会将文件发送给导入器,您可以验证行,保存,记录错误。通过一些努力,您甚至可以为上传工作表的用户提供任务进度。
答案 2 :(得分:0)
我最后采取了一些步骤来使用可更新的SQL视图来解决每个Occam剃刀的问题。这意味着一些牺牲:
这允许将平面数据集(CSV / Excel)导入标准化数据库的简单方法:
INSERT INTO <VIEW> (<COLUMNS>) VALUES (<CSV-ROW-FIELDS>);
答案 3 :(得分:0)
这是我在github上找到的另一种方法。基本上它检测模式并允许覆盖。它的整个目标是生成由psql和/或任何驱动程序执行的原始sql。
https://github.com/nmccready/csv2psql
% python setup.py install
% csv2psql --schema=public --key=student_id,class_id example/enrolled.csv > enrolled.sql
% psql -f enrolled.sql
还有很多选项可用于更改(从许多现有cols创建主键)和合并/转储。