我有一个json格式的文件,有这样的结构:
{
"Admiralty Islands": [
[
"Up to 1 kg",
"5.00"
],
[
"1 - 10 kg",
"10.00"
],
],
"Afghanistan": [
[
"Up to 1 kg",
"15.00"
],
[
"1 - 10 kg",
"20.00"
],
],
...
}
还有三种模式:
class Country(models.Model):
name = models.CharField(max_length=128, unique=True)
class Weight(models.Model):
name = models.CharField(max_length=128, unique=True)
min_weight = models.IntegerField()
max_weight = models.IntegerField()
class Shipping(models.Model):
country = models.ForeignKey(Country)
weight = models.ForeignKey(Weight)
price = models.DecimalField(max_digits=7, decimal_places=2)
使用json文件导入数据库的最正确方法是什么?
我应该将json文件转换为fixture文件吗?但是如何处理表之间的关系呢?
或者编写view
之类的更好:
f = open('file.json', 'r')
obj = simplejson.load(f)
for o in obj:
record = Country(name = o)
record.save()
但也无法弄清楚如何在models
之间建立关系。
或者有更简单的方法吗?
感谢。
答案 0 :(得分:13)
使用manage.py导入灯具:
python manage.py loaddata fixture.json
答案 1 :(得分:3)
我没有在json中看到一个非常清晰的结构,因为它没有明确定义哪个字段应该进入哪个模型以及所有内容是如何相关的。所以我建议只创建一个导入脚本,手动遍历所有json并创建正确的模型实例。
我认为结构良好的json的一个很好的例子是Django序列化的输出。您可以查看它here。
答案 2 :(得分:2)
将json
中的数据填充到数据库中
您需要将数据字段从json映射到数据库。
这样做的最佳和首选或更确切的设计方法是使用固定装置。
对于映射Django序列化是GO的方法。
答案 3 :(得分:0)
自从提出这个问题以来,Django已经发展了很多。在Django 2.x下,引入最少依赖项的最佳方法可能是使用Django内置的serializers(如@ miki725所述)和data migrations。这样,无论何时运行迁移(包括在运行单元测试之前运行迁移时),都可以加载数据。