同步数据库
python manage.py makemigrations
python manage.py migrate
一、增删改查
1、添加表内容(三种方式)
1.1 obj = models.UserType(列名=‘内容’)
obj.save()
1.2 models.UserType.objects.create(列名=‘内容’)
1.3user_dict={‘列名‘:‘内容’,‘列名‘,‘内容’}
models.UserType.objects.create(**user_dict)
2、查询数据
2.1 request.POST.get(‘usernaem‘)
#获取单条数据,不存在则报错(不建议)
2.2 ret =models.UserType.objects.all()
#获取全部
print(type(ret),ret.query)
for item in ret:
#根据循环可以输出表内容
print(item,item.nid,item.caption)
#ret.query 返回一个原生SQL
#ret,得到一个特殊的QuerySet对象
2.3 ret =models.UserType.objects.all().values(‘nid‘)
print(ret)
#values(‘xxx‘) #返回一个列表中包含字典
2.4 ret=models.UserType.objects.all().values_list(‘nid‘)
print(‘ret‘)
#返回一个列表中加元组
2.5 model.UserType.objects.filter(name=‘name‘)
# 获取指定条件的数据
3、更改数据库内容
3.1 models.UserInfo.objects.filter(user=‘alex‘).update(email=‘123@qq.com‘)
#将指定的条件更新到数据库,可以使用字典**kwargs
3.2 obj = models.UserInfo.objects.get(user=‘alex‘)
obj = email=‘!!!!@!!!!!‘
obj.save()
#修改单条数据
4、删除数据
4.1models.UserInfo.objects.filter(name=‘alex‘).delete()
按条件删除
二、双下划线操作
1.连表操作
1.1 ret =models.UserInfo.objects.all().values(‘user‘,‘user_type__caption‘)
##user_type__caption __双下划线在这是执行连表操作,输出另外表内容
1.2 拿出类型是超级管理员的所有用户
ret = models.UserInfo.objects.filter(user_type__caption="管理员").values(‘user‘,‘user_type__caption‘)
2.多对多(ManyToMany)
注:创建多台主机,多个部门
1.自动创建关系表
1.1 h2g =models.ManyToManyField(‘host‘)
#创建多对多关系
1.1.1 将多台机器分配给一个组
add添加关系,remove 删除表关系,delete删除表关系和表 set 添加,删除
h = Host.objects.get(hid=1) ##只删除表关系
h.group_set.remove(*Group.objects.filter(gid__gt=1))
h = Host.objects.get(hid=1) ##添加表关系
h.group_set.add(*Group.objects.filter(gid__gt=1))
h = Host.objects.get(hid=1)
h.group_set.all().delete() #delete删除表关系和表
obj =Group.objects.get(gid=1)
print(obj.gid,obj.name,obj.h2g.all())
#bj.h2g.all() 是关系表,没创建关系输出空列表
q =models.objects.filter(hid__gt=3)
obj.h2g.add(*q)
#将多台主机分到obj组
2.2.2 将一台主机分给多个组
h =Host.objects.get(hid=1)
obj =Group.objects.get(gid=1)
obj.h2g.add(h) ##主机id等于1分配到第一组
obj =Group.objects.get(gid=2) ##
obj.h2g.add(h)###主机id等于1分配到第二组
h =models.Host.objects.get(hid=1) ##找到第一台主机
h.group_set.add(*Group.objects.filter(gid__gt=2))
#gid大于2的所有分组分配给H主机
反向查找 表名__set ,查找什么表名就是什么
h.models.Host.objects.get(hid=1)
h.group_set.add(*models.Group.objects.filter(gid__gt=12))
注:
h = Host.objects.get(hid=1)
h.group_set.add(1) ##可以直接写数字添加
h.group_set.add(Group.objects.get(gid=1))
h.group_set.add(*[1,2,3]) ##可以用列表添加关系
h.group_set.set(Group.objects.filter(gid__gt=18), clear=True)
clear = True 清空在设置,
set 表中没有的添加,
注:附加
update_or_create,get_or_create 这两个是一样的
都是给group和关系表 添加数据 前提是关系表里不存在这个数据
列:
# r = h.group_set.update_or_create(name=‘技术部‘)
如果没有技术部,就给group组中加上技术部,关系表中自动关联一条数据
# print(r)
# r = h.group_set.get_or_create(name=‘人事部‘)
# print(r)
2.自己创建表关系
HostToGroup.objects.create(Host_id_id=1,group_id_id=2,status=11)
#添加内容
原文:http://www.cnblogs.com/pythonxiaohu/p/5798471.html