一、数据库配置
在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