实训记录(六)

交互

    • 数据库连接
      • 1 创建记录
      • 2 查询记录
      • 3 修改记录
    • 下一步工作

标点啄木鸟-后端

数据库连接

登录后界面mainPage
实训记录(六)_第1张图片

1 创建记录

方法一:实例化(调用save()方法之前,Django不会访问数据库;save()方法没有返回值)

from apps.models import Author
author = Author(last_name=‘fe_cow’)
author.save()
print author

方法二:create() (只用一条语句创建并保存一个对象,使用create()方法。)

Author.objects.create(first_name=‘fe’,last_name=‘cow’, email=‘[email protected]’)

方法三:get_or_create(), 这种方法可以防止重复(速度稍慢,因为会先查数据库), 它返回一个元组。创建成功返回True,失败的话False,不执行创建。

author = Author.objects.get_or_create(last_name=‘fe_cow’)
print author
(, False) # False:说明已经重复 创建失败

author = Author.objects.get_or_create(last_name=‘cu_cow’)
print author
(, True) # True: 创建成功

2 查询记录

方法一:查询所有对象 (all()方法返回包含数据库中所有对象的一个查询集。)

author = Author.objects.all()
print author
, , , , , , ]>

方法二:过滤查询 (filter()返回一个新的查询集,它包含满足查询参数的对象。)

author = Author.objects.filter(last_name=‘cu_cow’)
print author
]>

方法三:指定查询 (get查询只能返回一个对象,多了少了都会引发DoesNotExist 异常)

author = Author.objects.get(id=1)
print author
fecow

方法四:双下划线查询__;__contains:包含;__icontains不区分大小写;__regex:正则查询;__lt:小于xxx;__lte:小于等于xxx;__gt:大于xxx;__gte:大于等于xxx;__startswith(): 以xxx开头,;__istartswith():不区分大小写以xxx开头, __endswith():以xxx结尾;__iendswith():以xxx结尾不区分大小写

以上使用方法基本上都一致:对象.objects.filter(属性 __xxx) 例子如下:

author = Author.objects.filter(id__gte=2)
print author
, , , , , ]>
单独说一个特殊的__in 判断字段在列表内。通常用pk指主键,不限于id,适用更好。

author_list = Author.objects.values_list(‘id’, flat=True)
返回的是:

Author.objects.filter(pk__in=author)
, , , , , ]>

方法五:first(), last()获取查询结果中单个对象

Author.objects.filter(id__gte=2)
#返回结果:QuerySet集合
, , , , , ]>

Author.objects.filter(id__gte=2).first()
返回结果:objects对象 而且返回第一个对象

Author.objects.filter(id__gte=2).last()

返回结果:objects对象 而且返回的是最后一个对象

方法六:通过values查询

values(‘字段’)用字典形式,返回的是指定字段的查询结果;

Author.objects.values(‘last_name’)

返回字典列表;多个字段间以逗号分隔
values_list(‘字典’),返回的也是指定字段的查询结果

Author.objects.values_list(‘last_name’)

返回的是元组列表,多个字段也是用逗号分割

values_list(‘字段’, flat=True) flat=True :之后返回的是值列表

Author.objects.values_list(‘id’, flat=True)

返回的是列表

方法七:exists()

Author.objects.filter(id=2).exists()
True
QuerySet包含数据返回True

Author.objects.filter(last_name=‘Au_cow’).exists()
False
QuerySet不包含数据返回False

3 修改记录

QuerySet.update(‘字段’=‘修改的值’)

Author.objects.filter(last_name=‘cu_cow’).update(last_name=‘Ai_cow’)
1L
修改的前提是先查找,然后调用update(field=val)方法,只有QuerySet集合对象才能调用该方法,也就是说通过get(), first(), last()获取的对象没有该方法。
实训记录(六)_第2张图片

修改记录

下一步工作

实训记录(六)_第3张图片
实训记录(六)_第4张图片
完成所有查询修改流程
优化查找效率(优化索引结构等)
添加超级管理员对教师信息的统一导入
整合前端设计的登录界面

你可能感兴趣的:(实训记录(六))