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层的主要内容,如果未能解决你的问题,请参考以下文章

django-知识系列

Django之模型层(ORM相关知识)

Django+小程序技术打造微信小程序助手

如何在 Django Summernote 中显示编程片段的代码块?

djano-模板层基础知识

Django如何将数据从视图发送到模板