数据库的操作包括增删查改,这段时间用到了以下几个操作。
数据库如下:
# 设备表 class Equipment(models.Model): ip = models.CharField(verbose_name="设备IP地址" ,unique=True,null=True,blank=False,max_length=40) pingstatus = models.CharField(verbose_name="IP是否连通",max_length=40,null=True) sysName = models.CharField(verbose_name="设备名", max_length=40,null=True) ifNumber = models.IntegerField(verbose_name="设备接口数目", null=True) sysLocation = models.CharField(verbose_name="设备所在位置",max_length=40, null=True) sysContact = models.CharField(verbose_name="设备联系人",max_length=40, null=True) snmpAgentStatus = models.CharField(verbose_name="snmp-agent是否开启", max_length=10, null=True) tag = models.CharField(verbose_name="扫描标签", max_length=40, blank=True, null=True) class Meta: db_table = 'equipment' verbose_name = '设备' verbose_name_plural = '设备' # 接口表 class Interface(models.Model): ip = models.ForeignKey(Equipment,verbose_name="设备") ##外键 ifDescr = models.CharField(verbose_name="接口信息描述",max_length=50, null=True) ifType = models.CharField(verbose_name="接口类型",max_length=50, null=True) ifPhysAddress = models.CharField(verbose_name="接口物理地址",max_length=12, null=True) ifOperStatus = models.CharField(verbose_name="接口当前状态",max_length=10, null=True) class Meta: db_table = 'interface' verbose_name = '接口' verbose_name_plural = '接口' # 接口流量统计表 class InterfaceFlow(models.Model): interface = models.ForeignKey(Interface,verbose_name="接口") ##外键 time = models.CharField(verbose_name="统计时间",max_length= 100) ifSpeed = models.CharField(verbose_name="接口当前带宽",max_length=500) ifInOctet= models.CharField(verbose_name="接口流入流量",max_length=500) ifOutOctet= models.CharField(verbose_name="接口流出流量",max_length=500) class Meta: db_table = 'interface_flow' verbose_name = '流量统计' verbose_name_plural = '流量统计'
一、查询
取出一个表里所有的数据,比如取出Equipment表里所有的数据
data = Equipment.objects.all()
for x in data:
print x.ip
print x.pingstatus
print x.sysName
一对多查询,取出某个IP对应的所有接口的接口信息
host = Equipment.objects.get(ip = ip)
interfacedata = host.interface_set.all()
注意,这里的_set前面的表名要全部小写,不能有下划线之类的,否则会报错
说一下get和filter的区别:
get返回的是一个对象,如果满足条件的有多条,或者不存在满足条件的就会报错。
filter返回的是一个列表,没有满足条件的就返回[],有多条数据满足条件也不会报错。
如果是这样 result = Equipment.objects.all().value() ,那得到的就是一个字符串列表,不是一个字典列表。没有后面的value()返回的就是一个字典列表。
二、增
新增一条数据,注意不要忘了.save() 。当然也不止这一个办法
Equipment(ip=ip_str, pingstatus='是', sysName=sysname, ifNumber=ifnumber,
sysLocation=syslocation,
sysContact=syscontact, snmpAgentStatus=snmpAgentStatus, tag=tag).save()
三、删
Equipment.objects.filter(ip=ip).delete()
四、改
Equipment.objects.filter(ip=ip_str).update(pingstatus='否', sysName=None, ifNumber=None,
sysLocation=None,
sysContact=None,
snmpAgentStatus=None, tag=tag)
具体操作可参考
Django官方文档