千家信息网

CMDB之Django 数据库ORM操作

发表于:2024-10-09 作者:千家信息网编辑
千家信息网最后更新 2024年10月09日,CMDB实现数据展示功能部分代码。views.pydef asset(request): asset = Asset.objects.all() return render_to_resp
千家信息网最后更新 2024年10月09日CMDB之Django 数据库ORM操作
CMDB实现数据展示功能部分代码。views.pydef asset(request):    asset = Asset.objects.all()    return render_to_response("asset.html",{'asset': asset})    models.pyclass Asset(models.Model):    ipaddr = models.CharField(max_length=20, verbose_name=u'IP地址', primary_key=True)  #需定义primary_key,否则会自动创建id列    hostname = models.CharField(max_length=30, verbose_name=u'主机名')    nodes = models.CharField(max_length=20, verbose_name=u'应用节点')    applications = models.CharField(max_length=30, verbose_name=u'应用名')    group = models.CharField(max_length=20, verbose_name=u'应用组名')    memory = models.CharField(max_length=5, verbose_name='内存大小')    env = models.CharField(max_length=5, verbose_name='环境变量')    flag = models.PositiveSmallIntegerField(verbose_name=u'flag')    #def __unicode__(self):    #    return u'%s,%s,%s,%s,%s,%s,%s,%s' %(self.ipaddr, self.hostname, self.nodes, self.app, self.group, self.memory, self.disk, self.cpu)    class Meta:        db_table = 'fcenv_copy'  #表名,默认为app名+类名        verbose_name = u'主机资产信息'        verbose_name_plural = u'主机资产信息管理'        asset.html{% for value in asset %}{% endfor %}
IP地址 机器名 节点 应用名称 组别 内存 环境变量 flag 操作
{{ value.ipaddr }}{{ value.hostname }}{{ value.nodes }}{{ value.applications }}{{ value.group }}{{ value.memory }}{{ value.env }}{{ value.flag }} 编辑 连接 删除

以下是常用ORM操作:


# models.Tb1.objects.create(c1='xx', c2='oo') 增加一条数据,可以接受字典类型数据 **kwargs

# obj = models.Tb1(c1='xx', c2='oo') # obj.save() # 查 # # models.Tb1.objects.get(id=123) # 获取单条数据,不存在则报错(不建议) # models.Tb1.objects.all() # 获取全部 # models.Tb1.objects.filter(name='seven') # 获取指定条件的数据 # 删 # # models.Tb1.objects.filter(name='seven').delete() # 删除指定条件的数据 # 改 # models.Tb1.objects.filter(name='seven').update(gender='0') # 将指定条件的数据更新,均支持 **kwargs # obj = models.Tb1.objects.get(id=1) # 修改单条数据 # obj.c1 = '111' # obj.save() # 获取个数 # # models.Tb1.objects.filter(name='seven').count() # 大于,小于 # # models.Tb1.objects.filter(id__gt=1) # 获取id大于1的值 # models.Tb1.objects.filter(id__lt=10) # 获取id小于10的值 # models.Tb1.objects.filter(id__lt=10, id__gt=1) # 获取id大于1 且 小于10的值 # in # # models.Tb1.objects.filter(id__in=[11, 22, 33]) # 获取id等于11、22、33的数据 # models.Tb1.objects.exclude(id__in=[11, 22, 33]) # not in # contains # # models.Tb1.objects.filter(name__contains="ven") # models.Tb1.objects.filter(name__icontains="ven") # icontains大小写不敏感 # models.Tb1.objects.exclude(name__icontains="ven") # range # # models.Tb1.objects.filter(id__range=[1, 2]) # 范围bettwen and # 其他类似 # # startswith,istartswith, endswith, iendswith, # order by # # models.Tb1.objects.filter(name='seven').order_by('id') # asc # models.Tb1.objects.filter(name='seven').order_by('-id') # desc # limit 、offset # # models.Tb1.objects.all()[10:20] # group by from django.db.models import Count, Min, Max, Sum # models.Tb1.objects.filter(c1=1).values('id').annotate(c=Count('num'))

# SELECT "app01_tb1"."id", COUNT("app01_tb1"."num") AS "c" FROM "app01_tb1" WHERE "app01_tb1"."c1" = 1 GROUP BY "app01_tb1"."id"


Many-to-one relationships 多表关联查询。


from django.db import modelsclass Reporter(models.Model):    first_name = models.CharField(max_length=30)    last_name = models.CharField(max_length=30)    email = models.EmailField()    def __str__(self):              # __unicode__ on Python 2        return "%s %s" % (self.first_name, self.last_name)class Article(models.Model):    headline = models.CharField(max_length=100)    pub_date = models.DateField()    reporter = models.ForeignKey(Reporter, on_delete=models.CASCADE)    def __str__(self):              # __unicode__ on Python 2        return self.headline    class Meta:        ordering = ('headline',)        >>> r.article_set.filter(headline__startswith='This')]># Find all Articles for any Reporter whose first name is "John".>>> Article.objects.filter(reporter__first_name='John'), ]>


效果图。


附件是样式文件。

附件:http://down.51cto.com/data/2368115
0