我正在尝试在django中设置一个网站,该网站允许用户向包含有关其在欧洲议会中的代表的信息的数据库发送查询.我将数据放在逗号分隔的.txt文件中,格式如下:
议会,名称,国家,Party_Group,National_Party,职位
7,Marta Andreasen,英国,欧洲自由民主集团,英国独立党,成员
等等....
我想用这些数据填充一个SQLite3数据库,但到目前为止我发现的所有教程都只显示了如何手动执行此操作.由于我在文件中有736个观察结果,所以我真的不想这样做.
我怀疑这是一件简单的事情,但如果有人能告诉我如何做到这一点,我将非常感激.
托马斯
所以假设你models.py
看起来像这样:
class Representative(models.Model): parliament = models.CharField(max_length=128) name = models.CharField(max_length=128) country = models.CharField(max_length=128) party_group = models.CharField(max_length=128) national_party = models.CharField(max_length=128) position = models.CharField(max_length=128)
然后python manage.py shell
,您可以运行并执行以下命令:
import csv from your_app.models import Representative # If you're using different field names, change this list accordingly. # The order must also match the column order in the CSV file. fields = ['parliament', 'name', 'country', 'party_group', 'national_party', 'position'] for row in csv.reader(open('your_file.csv')): Representative.objects.create(**dict(zip(fields, row)))
而且你已经完成了.
附录(编辑)
根据托马斯的要求,这里有一个解释**dict(zip(fields,row))
:
因此,最初,fields
包含我们定义的字段名称列表,并row
包含表示CSV文件中当前行的值列表.
fields = ['parliament', 'name', 'country', ...] row = ['7', 'Marta Andreasen', 'United Kingdom', ...]
什么zip()
做的是它结合了两个列表成为对两份名单(如拉链)项目的一个列表; 即zip(['a','b,'c'], ['A','B','C'])
会返回[('a','A'), ('b','B'), ('c','C')]
.所以在我们的案例中:
>>> zip(fields, row) [('parliament', '7'), ('name', 'Marta Andreasen'), ('country', 'United Kingdom'), ...]
该dict()
函数只是将对列表转换为字典.
>>> dict(zip(fields, row)) {'parliament': '7', 'name': 'Marta Andreasen', 'country': 'United Kingdom', ...}
这**
是一种将字典转换为函数的关键字参数列表的方法.所以function(**{'key': 'value'})
相当于function(key='value')
.因此,在示例中,调用create(**dict(zip(field, row)))
相当于:
create(parliament='7', name='Marta Andreasen', country='United Kingdom', ...)
希望这可以解决问题.