ORM的操作二

跨表


正向:

    a: q = UserInfo.objects.all().first()

  q.ug.title


b:

  UserInfo.objects.values('nid','ug_id')  4

  UserInfo.objects.values('nid','ug_id','ug__title’)  4


c:

    UserInfo.objects.values_list('nid','ug_id','ug_title')

反向:

      小写表名_set

  a, obj=UserGroup.objects.all().first()

      result  = obj.usreinfo_set.all()  [userinfo对象,userinfo对象]


  小写表名

  b,v = UserGroup.objects.values('id','title')

      v = UserGroup.objects.values('id'.,'title','小写的表名称')

  v = UserGroup.objects.values('id'.,'title','小写的表名称_id')

      小写表名

c,v = UserGroup.objects.values_list('id','title')

      v = UserGroup.objects.values_list('id'.,'title','小写的表名称')

  v = UserGroup.objects.values_list('id'.,'title','小写的表名称_id')



二, ORM 操作数据库


  Http请求:

      url  -》  视图(模板+数据)


  步骤:

      1.创建数据库

  2.DATABASES = {

'default': {

'ENGINE': 'django.db.backends.mysql',

'NAME':'zjgis_db',

'USER': 'root',

'PASSWORD': 'creaway@123',

'HOST': '172.30.78.72',

'PORT': '13306',

}

}

# 由于Django内部连接MySQL时使用的是MySQLdb模块,而python3中还无此模块,所以需要使用pymysql来代替


            # 如下设置放置的与project同名的配置的 __init__.py文件中


            import pymysql

            pymysql.install_as_MySQLdb()

或者window xia    where python

cd  python 目录下 \Scripts\

pip install mysqlclient

      4. 在app  的 models.py  里添加表 的类

  from django.db import models

# Create your models here

class UserGroup(models.Model):

title=models.CharField(max_length=32)

class UserInfo(models.Model):

nid=models.BigAutoField(primary_key=True)

username=models.CharField(max_length=32)

password=models.CharField(max_length=64)

ug=models.ForeignKey("UserGroup",null=True,on_delete=models.CASCADE)


  5.  在settings 注册 app01


INSTALLED_APPS = [

'django.contrib.admin',

'django.contrib.auth',

'django.contrib.contenttypes',

'django.contrib.sessions',

'django.contrib.messages',

'django.contrib.staticfiles',

'app01',

]

6.创建数据库表或者修改表结构 都是以下两个命令 在数据库生成表

Terminal命令:python manage.py makemigrations

              python manage.py migrate




  #####单表增删改查  ########################################

#增删改查

from app01 import models

#新增

# models.UserGroup.objects.create(title='销售部')

# models.UserInfo.objects.create(username='root',password='pwd',age='18',ug_id='1')

#查找

# group_list=models.UserGroup.objects.all()    #取全部数据

group_list = models.UserGroup.objects.filter(id=1).first()

#group_list = models.UserGroup.objects.filter(id__gt=1) #取部分大于1

#group_list = models.UserGroup.objects.filter(id__lt=1)  小于1

#group_list 是QuerySet类型(列表)

#删除数据

# models.UserGroup.objects.filter(id=2).delete()

#更新

models.UserGroup.objects.filter(id=3).update(title='公共部')

#只取username和password 两列

models.UserInfo.objects.all().values('username','password')

########################################################

#result =models.UserInfo.objects.all().values('username','password')

# result 是字典

#QuerySet[{'id':'xx','name'='yeye'}]

for row in result :

    print(row)

{'name':'lilei','id':'2'}

    {'name':'lil','id':'1'}

    #######################################################

esult =models.UserInfo.objects.all().values_list('username','password')

# result 是元祖

#QuerySet[(1,‘f')]

for row in result :

    print(row)

(2:'lilei')

    (1:'lil')

#################################################################

##数据获取多个数据是

#1,对象【obj,obj,obj】

models.UserInfo.object.all()

models.UserInfo.object.filter(id__gt=1)

#2,字典【{id:’‘,name:’‘}】  取字段时候进行跨表  神奇双下横线

models.UserInfo.object.all().values('id','name',‘ug__title’)

models.UserInfo.object.filter(id__gt=1).values('id','name')

#3,元祖【(1,‘哈’)】          取字段时候进行跨表  神奇双下横线

models.UserInfo.object.all().values__liste('id','name')

models.UserInfo.object.filter(id__gt=1).values__liste('id','name')

group_list = models.UserGroup.objects.all()

##########################################################

#userinfo  ,ug是外键,正向操作,PS  一个用户只有一个用部门

obj= models.UserInfo.objects.all().first()

print(obj.usrname,obj.password,obj.ug.title)

          #1 可以关联两张表    1对1

  ######################################################################

    #UserGroup, 表名小写_set.all()  - 反向操作  PS:一个部门,有多少同事

一个部门,有多少人员    userinfo的外键是usergroup里id          #2 可以关联两张表    1对多

    a = models.UserGroup.objects.all().first()


              print('用户类型',a.id,a.title)

                for row in a.userinfo_set.all():           

                    print(row.password,row.username)

###################

用户类型 1 销售部

pwd root

admin admin

###################################################

result = models.UserType.object.all()

for item in result:

  print(item.title,item.userinfo_set.fileter(usename='xxx')


  ###############################################

你可能感兴趣的:(ORM的操作二)