Django知识4----models层
Posted Mr_Bai
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django知识4----models层相关的知识,希望对你有一定的参考价值。
一、配置数据库
1.建立项目的数据库
create database blog;(示例:数据库名字是blog)
2.在setting文件中设置DATABASES
1 DATABASES = {
2 ‘default‘: {
3 ‘ENGINE‘: ‘django.db.backends.mysql‘, # 改成mysql数据库。
4 ‘NAME‘: ‘blog‘,
5 ‘USER‘: ‘root‘,
6 ‘PASSWORD‘: ‘123‘,
7 ‘HOST‘: ‘127.0.0.1‘,
8 ‘PORT‘: ‘3306‘,
9 }
10 }
3.在应用的__init__.py文件中添加如下两行
作用:告诉django用pymysql模块来操作数据库,不然就会用默认的mysqldb模块来操作数据库了。
1 import pymysql
2 pymysql.install_as_MySQLdb()
4.在应用的models.py 文件中建立表的模型(定义类)
解释:类似一张Book的表,字段是id,title,author,publishDate,price,以及各个字段的类型和约束条件。
1 class Book(models.Model):
2 id = models.AutoField(primary_key=True)
3 title = models.CharField(max_length=32)
4 author = models.CharField(max_length=32)
5 publishDate = models.DateField()
6 price = models.DecimalField(max_digits=6,decimal_places=2)
5.建立了django的modle.py文件后,运行如下两条命令,在数据库中,按照表模型产生数据表
# 定义好模型,然后在终端执行两条命令来生成数据库。 python manage.py makemigrations
这时其实是在该app下建立 migrations目录,并记录下你所有的关于modes.py的改动,比如0001_initial.py, python manage.py migrate
接着执行migrate,这时候才真的把作用到数据库文件,产生对应的表.
二、model基础内容
1.ORM 映射关系
表名 <-------> 类名
字段 <-------> 属性
表记录 <------->类实例对象
2.单表操作
举例:现在有一个书籍的表(类名:Book)
2.1 添加记录、信息
方式一:(用save())
book_obj = models.Book(title=‘活着‘,author=‘yuan‘,publishDate=‘2015-10-23‘,price=23) # id设置了自增,可以不用添加 book_obj.save()
方式二:
current_obj = models.Book.objects.create(title=‘‘,author=‘‘,.......)
当前的current_obj就是现在新添加的对象,可以做一些操作。
2.2 修改记录、信息
#方式一:(效率高,推荐)
models.Book.objects.filter(id=1).update(title=‘‘,author=‘‘) # update()是queryset类型的方法
# 方式二
bool_obj = models.Book.objects.filter(id=0)[0]
book_obj.title =‘new_name‘
book_obj.save()
2.3 删除记录、信息
1 models.Book.objects.filter(id=id).delete()
2.4 查询记录、信息(重点)
Object与queryset的区别
# Object 指每条记录,是model类的实例对象
# queryset类型,是从数据库中查询到的每个对象的集合,类似列表。[obj1,obj2,obj3]
示例类的模型
#========models.py==========
from django.db import models
class Book(models.Model):
id = models.AutoField(primary_key=True)
title = models.CharField(max_length=32)
author = models.CharField(max_length=32)
publishDate = models.DateField()
price = models.DecimalField(max_digits=6,decimal_places=2)
def __str__(self):
return self.title
返回object对象类型的方法
1 models.Book.objects.get(**kwargs): 返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误。
返回QuerySet类型的方法
1 models.Book.objects.all() 查询多有结果 # <QuerySet [<Book: 活着>, <Book: 水浒传>, <Book: 饿了>]> 类设置了__str__方法,
2 models.Book.objects.filter(title=‘yuan‘) # 查询满足title=‘yuan‘的数据,返回QuerySet
3 models.Book.objects.exclude(**kwargs): 它包含了与所给筛选条件不匹配的对象
4 models.Book.objects.filter(author=‘yuan‘).values(‘id‘,‘title‘,‘author‘)
# 返回结果 <QuerySet [{‘id‘: 1, ‘title‘: ‘活着‘, ‘author‘: ‘yuan‘}, {‘id‘: 6, ‘title‘: ‘饿了‘, ‘author‘: ‘yuan‘}]>
5. models.Book.objects.filter(author=‘yuan‘).values_list(‘id‘,‘title‘,‘author‘)
# 返回结果:<QuerySet [(1, ‘活着‘, ‘yuan‘), (6, ‘饿了‘, ‘yuan‘)]>
其他
1 <6> order_by(*field): 对查询结果排序
2
3 <7> reverse(): 对查询结果反向排序
4
5 <8> distinct(): 从返回结果中剔除重复纪录
6
7 <10> count(): 返回数据库中匹配查询(QuerySet)的对象数量。
8
9 <11> first(): 返回第一条记录
10
11 <12> last(): 返回最后一条记录
12
13 <13> exists(): 如果QuerySet包含数据,就返回True,否则返回False
以上是关于Django知识4----models层的主要内容,如果未能解决你的问题,请参考以下文章