跨表
正向:
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')
###############################################