有没有一种方法可以使用django命令将数据从python列表传递到sqlite数据库的特定字段中?

时间:2020-06-12 23:51:11

标签: python django django-models django-forms django-views

我有一些数据是从网站上刮取,解析并清理成我需要的片段。数据存储在二维列表中,例如[[address1, name1, ip1], [address2, name2, ip2]]。前面提到的数据的抓取和存储是通过django命令完成的,我想用与验证数据相同的命令来更新我的模型。我也有一个具有以下字段和属性的模型:

class MonitoredData(models.Model):
   external_id = models.UUIDField(
       primary_key = True,
       default = uuid.uuid4,
       editable = False)
   mac_address = models.CharField(max_length=12)
   ipv4_address = models.CharField(max_length=200)
   interface_name = models.CharField(max_length=200)
   created_at = models.DateTimeField(auto_now_add=True)
   update_at = models.DateTimeField(auto_now=True)

address1需要进入mac_address字段,name1需要进入interface_name字段,ip1需要进入{{1 }}字段。其他字段需要根据其属性自动填充。

抓取并解析数据的django命令是:

ipv4_address

我想将数据存储到数据库中,而不是附加到嵌套if语句中的goodMac列表中。

对此的任何帮助将不胜感激,我正在使用Python 3.7.5和Django 3.0.5

1 个答案:

答案 0 :(得分:1)

我知道了!我希望这可以节省所有的时间和麻烦,而我一直想解决这个问题。我怀疑,一旦找到解决方案,这个解决方案就显得微不足道了。您导入模型,实例化模型的对象,然后更新字段并使用save()函数。这是固定代码。

import requests

from django.core.management.base import BaseCommand, CommandError

from Monitor.models import *
from Monitor.parse1 import parse1
from Monitor.parse2 import parse2
from Monitor.matcher import match

class Command(BaseCommand):
    def handle(self, *args, **options):
        url1 = 'https://next.json-generator.com/api/json/get/41wV8bj_O'
        url2 = 'https://next.json-generator.com/api/json/get/Nk48cbjdO'
    res1 = requests.get(url1)
    data1 = str(res1.content)

    res2 = requests.get(url2)
    data2 = str(res2.content)

    parsedData1 = parse1(data1)

    goodMac1 = []
    badMac1 = []


    for k in parsedData1:
        if len(k[0]) == 12:
            if match(k[0]):
                monInter = MonitoredData()
                monInter.mac_address = k[0]
                monInter.interface_name = k[1]
                monInter.ipv4_address = k[2]
                monInter.save()
                goodMac1.append(k)

        else:
            badMac1.append(k)


    parsedData2 = parse2(data2)

    goodMac2 = []
    badMac2 = []

    for j in parsedData2:
        if len(j[0]) == 12:
            if match(j[0]):
                goodMac2.append(j)
        else:
            badMac2.append(j)

以下是我最终使用的文档链接: https://docs.djangoproject.com/en/3.0/ref/models/instances/#django.db.models.Model.save https://docs.djangoproject.com/en/3.0/topics/db/models/