以前我们使用的框架,比如spring,spring MVC 操作数据库都是通过SQL命令进行的,而django框架,使用了ORM(Object Relational Mapping)框架, 使用的是面向对象的思想,对象和关系的映射。
连接mysql数据库的步骤,安装mysql的驱动。
以图书-人物 管理系统为例进行演示:
在models.py ⽂件中定义模型类。
book:name、pub_date、readcount、commentcount、is_delete
people:name、gender、description、book、is_delete
对于book 表:
设置name,它是一个string类,使用的是CharField方法
name = models.CharField(max_length=50,verbose_name="书名")
设置pub_date,它是日期类,使用 DatetimeField方法
pub_date = models.DateTimeField(verbose_name="发布日期",auto_created=True,null=True)
设置readcount、commentcount,他们都是整形变量,使用的是IntegerField,默认值设为0
readcount = models.IntegerField(verbose_name="阅读量",null=False,default=0,db_column="read_count")
commentcount = models.IntegerField(verbose_name="评论量",null=False,default=0)
设置布尔变量的值:使用的是BooleanField
is_delete = models.BooleanField(verbose_name="逻辑删除",default=False)
from django.db import models
# Create your models here.
from django.db.models import Model
class BookInfo(Model):
# book:
# name: 书名
#pub_date 书籍发布日期 datetime
#readcount :阅读量 int
#commentcount :评论量 int
#is_delete :是否删除 布尔类型
name = models.CharField(max_length=50,verbose_name="书名")
pub_date = models.DateTimeField(verbose_name="发布日期",auto_created=True,null=True)
readcount = models.IntegerField(verbose_name="阅读量",null=False,default=0,db_column="read_count")
commentcount = models.IntegerField(verbose_name="评论量",null=False,default=0)
is_delete = models.BooleanField(verbose_name="逻辑删除",default=False)
def __str__(self):
return self.name
class Meta:
verbose_name="书籍"
再补充一个gender
gender_choice = (
(0,"男性"),
(1,"女性")
)
gender = models.IntegerField(verbose_name="性别",default=0,choices=gender_choice)
还有更多的类型:
!!!!!people的写法和book信息基本一致,只写出 外键的部分
!!!!!!!
book = models.ForeignKey(to="BookInfo",verbose_name="人物所在书籍",on_delete=models.CASCADE)
to 后面跟的是另一张表,on_delete=models.CASCADE:级联操作。如果外键对应的那条数据被删除了,那么这条数据也会被删除
迁移数据
1)⽣成迁移⽂件
python manage.py makemigrations
2)同步到数据库中
python manage.py migrate
添加数据:
# 1.插入书籍
#1.1 模型类的实例化对象 .save()
book = BookInfo(name="西游记")
book.save()
使用的面向对象的思想,就可以不用SQL语句了
还可以使用这种方式创建:
#1.2 模型类.objects.create()
from MySQLdb import Date
BookInfo.objects.create(name="论语",pub_date=Date.today())
修改数据
方法一:
方法二