标点啄木鸟-后端
数据库连接
登录后界面mainPage
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=‘280773872@qq.com’)
方法三:get_or_create(), 这种方法可以防止重复(速度稍慢,因为会先查数据库), 它返回一个元组。创建成功返回True,失败的话False,不执行创建。
author = Author.objects.get_or_create(last_name=‘fe_cow’)
print author
(<Author: fe_cow>, False) # False:说明已经重复 创建失败author = Author.objects.get_or_create(last_name=‘cu_cow’)
print author
(<Author: cu_cow>, True) # True: 创建成功
2 查询记录
方法一:查询所有对象 (all()方法返回包含数据库中所有对象的一个查询集。)
author = Author.objects.all()
print author
<QuerySet [<Author: fecow>, <Author: fe_cow>, <Author: fe cow>, <Author: fe cow>, <Author: fe cow>, <Author: fe cow>, <Author: cu_cow>]>
方法二:过滤查询 (filter()返回一个新的查询集,它包含满足查询参数的对象。)
author = Author.objects.filter(last_name=‘cu_cow’)
print author
<QuerySet [<Author: cu_cow>]>
方法三:指定查询 (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
<QuerySet [<Author: fe_cow>, <Author: fe cow>, <Author: fe cow>, <Author: fe cow>, <Author: fe cow>, <Author: cu_cow>]>
单独说一个特殊的__in 判断字段在列表内。通常用pk指主键,不限于id,适用更好。author_list = Author.objects.values_list(‘id’, flat=True)
返回的是:<QuerySet [1L, 2L, 3L, 4L, 5L, 6L, 7L]>Author.objects.filter(pk__in=author)
<QuerySet [<Author: fe_cow>, <Author: fe cow>, <Author: fe cow>, <Author: fe cow>, <Author: fe cow>, <Author: cu_cow>]>
方法五:first(), last()获取查询结果中单个对象
Author.objects.filter(id__gte=2)
#返回结果:QuerySet集合
<QuerySet [<Author: fe_cow>, <Author: fe cow>, <Author: fe cow>, <Author: fe cow>, <Author: fe cow>, <Author: cu_cow>]>Author.objects.filter(id__gte=2).first()
返回结果:objects对象 而且返回第一个对象
<Author: fe_cow>Author.objects.filter(id__gte=2).last()
<Author: cu_cow>
返回结果:objects对象 而且返回的是最后一个对象
方法六:通过values查询
values(‘字段’)用字典形式,返回的是指定字段的查询结果;
Author.objects.values(‘last_name’)
<QuerySet [{‘last_name’: u’fecow’}, {‘last_name’: u’fe_cow’}, {‘last_name’: u’cow’}, {‘last_name’: u’cow’}, {‘last_name’: u’cow’}, {‘last_name’: u’cow’}, {‘last_name’: u’cu_cow’}]>
返回字典列表;多个字段间以逗号分隔
values_list(‘字典’),返回的也是指定字段的查询结果Author.objects.values_list(‘last_name’)
<QuerySet [(u’fecow’,), (u’fe_cow’,), (u’cow’,), (u’cow’,), (u’cow’,), (u’cow’,), (u’cu_cow’,)]>
返回的是元组列表,多个字段也是用逗号分割
values_list(‘字段’, flat=True) flat=True :之后返回的是值列表
Author.objects.values_list(‘id’, flat=True)
<QuerySet [1L, 2L, 3L, 4L, 5L, 6L, 7L]>
返回的是列表
方法七:exists()
Author.objects.filter(id=2).exists()
True
QuerySet包含数据返回TrueAuthor.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()获取的对象没有该方法。
修改记录
下一步工作
完成所有查询修改流程
优化查找效率(优化索引结构等)
添加超级管理员对教师信息的统一导入
整合前端设计的登录界面