将静态数据添加到现有的django应用程序 - >移民?灯具?命令?

时间:2013-10-25 16:55:20

标签: django csv postgresql-9.1

我们有一张有两个列的表:城市和县。使用PostgreSQL 9.1

我们发现那里有很多失踪的城市。 所以我得到了一个包含大量这样的城市/县条目的CSV文件。

将此数据添加到正在运行的应用中的最佳方法是什么?

  • 我理解迁移应该最适合架构更改。这不是这种情况。
  • 瞄准镜似乎是第一眼看上去的最佳选择但是没有固定装置的逻辑,它只是json。我需要保持现有数据不被触及,因为它是由其他表中的id引用的。当然不会欢迎重复。
  • 在我看来,最干净的方式是一个命令,我可以在其中加载csv文件并按条目处理条目,只有在找不到城市元素时才添加新文件。

2 个答案:

答案 0 :(得分:3)

您可以使用get_or_create()通过管理命令或通过南Data Migration执行所需操作。以下是管理命令的示例:

import csv

from django.core.management.base import BaseCommand, CommandError
from your_app.models import YourModel


class Command(BaseCommand):
    def handle(self, *args, **options):
        with open('your-file.csv', 'rb') as csv_file:
        for row in csv_file:
            # you would need to know the column index to access as
            # csv reader returns a simple List for each row
            obj, created = YourModel.objects.get_or_create(field=row[0],
                defaults={'field': row[0]})

答案 1 :(得分:2)

您可以制作一个south datamigration,它将通过ORM导入您的数据。 你可以在那里做任何逻辑。例如,通过get_or_create()

检查重复项