第四章 Django模型

一、数据库配置

在settings.py中配置DATABASE,如:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

ENGINE:数据库驱动引擎

NAME:数据库名称

二、创建django应用

python manage.py startapp books

三、使用python定义模型

django模型是使用pthon代码对数据库中数据的描述,是数据结构,相当与SQL语句中的create table

四、创建模型

一个类对应一张数据库表,属性名称等于字段名与数据类型

from django.db import models

class Publisher(models.Model):
name = models.CharField(max_length=30)
address = models.CharField(max_length=50)
city =models.CharField(max_length=60)
state_province = models.CharField(max_length=30)
country = models.CharField(max_length=50)
website = models.URLField()

class Author(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=40)
email = models.EmailField()

class Books(models.Model):
title = models.CharField(max_length=100)
authors = models.ManyToManyField(Author)
publisher = models.ForeignKey(Publisher,on_delete=models.CASCADE)
publication = models.DateField()

1、检查模型:python manage.py check

出现以下情况为模型检查成功:System check identified no issues (0 silenced).

2、告诉django已对模型进行修改,也就是迁移

python manage.py makemigrations books

3、查看上一步迁移操作运行的sql

python manage.py sqlmigrate books 00001

其中0001是迁移时生成的文件编号

4、创建表

python manage.py migrate

五、数据访问

1、增

方法1:使用关键字创建模型的实例,再调用save()方法

from books.models import Publisher
p1 = Publisher(name='Ben',address='gd',city='sz',state_province='gd',country='cn',website='http://www.baidu.com')
p1.save()

方法2:

p1 = Publisher.objects.create(name='Ben12',address='gd12',city='sz21',state_province='g2d1',country='1cn',website='http://www.1baidu.com')

 

2、删

删除部分数据

Publisher.objects.filter(country='cn').delete()

删除全部数据

Publisher.objects.all().delete()

 

3、改

全部字段修改

P=Publisher.objects.get(name='Ben')
p.address='US'
p.save()

#对其他字段也update

对单一字段修改

Publisher.objects.filter(id=2).update(name='Ben4')

#只对id=2的name字段update

 

4、查

查看所有记录

Publisher.objects.all()

条件查询

Publisher.objects.filter(name='Ben')

模糊查询,like语句

Publisher.objects.filter(name__contains='Ben')

#类似 where name like '%Ben%'

查找单个对象,出现多个时报错

Publisher.objects.get(address='gd')

5、排序

Publisher.objects.order_by('name')
#按字段name排序
Publisher.objects.order_by('-name')
#按字段name反向排序

6、链式查找

Publisher.objects.filter(country='cn').order_by('-name')

#where country='cn' order by name desc

7、切片

相当与limit

Publisher.objects.order_by('name')[0]

#limit 1

 

posted @ 2019-11-20 22:28  blf  阅读(121)  评论(0编辑  收藏  举报