基础配置 url搭建
from app import views
url(r'^test.html/', views.test),
服务注册
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# 'app.apps.App01Config',
'app',
]
数据库配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
app数据表类的创建
from django.db import models# Create your models here.
class Utype(models.Model):
title = models.CharField(max_length=32)class Uinfo(models.Model):
name = models.CharField(max_length=32)
age = models.IntegerField()
ut = models.ForeignKey('Utype')
view函数的创建
from app import models
def test(request):
#创建数据
models.Utype.objects.create(title='普通用户')
models.Utype.objects.create(title='高级用户')
models.Utype.objects.create(title='管理用户')models.Uinfo.objects.create(name='李伟',age=18,ut_id=1)
models.Uinfo.objects.create(name='赵小亮',age=28,ut_id=2)
models.Uinfo.objects.create(name='王京',age=22,ut_id=3)
models.Uinfo.objects.create(name='王伟',age=12,ut_id=3)
models.Uinfo.objects.create(name='李小路',age=22,ut_id=1)
models.Uinfo.objects.create(name='PGone',age=22,ut_id=2)
return HttpResponse('.....')
访问 访问地址,后台执行test函数,执行里面的数据的写入
文章图片
文章图片
数据的读取
文章图片
连表读取用户的类型
一对一的连表查询
from app01 import models
def test(request):
result = models.Uinfo.objects.all()
for item in result:
print(item.name,item.age,item.ut.title)#这里的item.ut.title可以直接通过连表查询结果
return HttpResponse('.....')
文章图片
多表的外键正向查询假如数据库中是多个表通过外键关联的,我们也可以在一个表里面通过点的方式一直下去的
from django.db import models# Create your models here.
class Ubumen(models.Model):
caption = models.CharField(max_length=32)class Utype(models.Model):
title = models.CharField(max_length=32)
ucap = models.ForeignKey('Ubumen')class Uinfo(models.Model):
name = models.CharField(max_length=32)
age = models.IntegerField()
ut = models.ForeignKey('Utype')
我们可以从uinfo表里面一直找下去的 ,如下
result = models.Uinfo.objects.all()
for item in result:
print(item.ut.ucap.caption)#这里就是一步一步的跨表查找下去的!
return HttpResponse('.....')
反向查找 上面我们看到了uinfo设置了utype的外键,可以从uinfo里面正向的查找utype里面的内容。我们也可以通过utype,来反向查找在当前title下面的所有用户
在utype表里面默认是有一个字典,是按照外键表名字+下划线+set,组成的一个quset字段。对utype中的第一行查看所有的用户信息
obj = models.Utype.objects.all().first()
for row in obj.uinfo_set.all():
print(row.name,row.age)
【ORM的连表操作】
文章图片
指定取的列数 例如,指定只取两列
models.Uinfo.objects.all().values('id','name')#这表示只取id和name这两列数据
这里出来的结果还是QuerySet不是对象了。是一个字典类型了。QuerySet[{'id':'xx','name':'xxx}],这里在for循环出来的结果就是一个一个字典了
如果是values_list拿到的结果就不是字典了,QuerySet里面是一个元祖总结 第二种和第三种方法是不能跨表,第一种是对象形式是可以跨表的。
文章图片
要想
字典
和元祖
的的时候也能跨表,就要在查询的时候就执行跨表,如下面的代码文章图片
本文转自 kesungang 51CTO博客,原文链接:http://blog.51cto.com/sgk2011/2062083,如需转载请自行联系原作者