对Django 数据库操作的几点

数据库的操作包括增删查改,这段时间用到了以下几个操作。

数据库如下:

# 设备表
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官方文档


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值