由原来直接通过sql语句来执行各种操作,改为通过ORM来操作数据库,也就是不需要通过数据库的相关语句来操作增删改查,而是通过设置类的方式来创建数据表存储数据
1. 变更Django关联数据库
在settings.py中修改databases部分,engine中对应的数据库类型是mysql,数据库名为demo,并设置用户名和密码
2. 在navicate或者命令行中创建对应的数据库demo:
在navicate中直接创建数据库:
或者通过命令行创建demo数据库:
命令: --> mysql -u root -p 输入密码
--> create database demo default character set utf8
3. 安装mysql驱动 -- pymysql
在venv环境中安装 pymysql
在app1中的__init__.py文件中添加mysql驱动pymysql , 并确保pymysql已经被安装
4. 创建数据表
在app1中的models.py文件中,添加表对应的类,比如:
名为Person的表格,对应需要创建一个Person类,并在此类中添加对应的字段(即表格中的字段)
from django.db import models
# Create your models here.
class CreateUpdate(models.Model):
created_at = models.DateTimeField(auto_now_add=True) # 默认自动添加
updated_at = models.DateTimeField(auto_now=True)
class Meta:
abstract = True #CreateUpdate不对应任何表
class Person(CreateUpdate): # 一个表对应一个类
# first_name, last_name, created_at, updated_at
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
class Order(CreateUpdate):
# order_id, order_desc
order_id = models.CharField(max_length=30, db_index=True) # order_id是外键
order_desc = models.CharField(max_length=120)
1)执行命令: python manage.py makemigrations
可见,生成了迁移文件Order, Person,但是并没有生成数据库
2)执行命令: python mange.py migrate --> 生成数据表
在navicate中可以通过右键中的设计表选项,查看数据类型
5. 增删改查
可以直接通过manage.py的shell命令行来操作数据库的增删改查
1) python manage.py shell 进入命令行
2) from app1.models import Person,Order
3) Person.objects.create(first_name = 'andy', last_name= 'feng') # 增加数据
4) p = Person(firs_name = 'xiaoke',last_name = 'wang') # 增加数据
p.save()
5) 查找数据:
Person.objects.all() # 获取所有数据
Person.objects.get(first_name = 'andy') # 查找某些符合条件的数据, 用于获取一条数据, 返回的是一个对象, 如果数据
不存在,或者多条数据存在,会抛出异常
Person.objects.filter(id__gt=1) # 获取id大于1的数据, 用于获取多条数据, 返回的是queryset,需要进行for循环,
才能取出里面的值
Person.objects.filter(id__gt=1).order_by('last_name') # 获取id大于1的数据,并按照last_name进行排序,
返回的是queryset,需要进行for循环, 才能取出里面的值
6) 修改数据:
先获得数据: p = Person.objects.get(id=2)
再修改数据: p.first_name = 'Jay'
保存数据: p.save()
7) 删除数据:
p.delete()
6. 如果删除了数据库中的表,想重新生成,怎么办?
1. 删除app下的migrations文件夹
2. 删除数据库中表 django_migrations 中对应app的记录
3. run命令 python manage.py makemigrations appName
4. run命令 python manage.py migrate
就可以重新生成表了