Django中每一个模型model都对应于数据库中的一张表,每个模型中的字段都对应于数据库表的列。方便的是,django可以自动生成这些create table, alter table, drop table的操作。其次Django为咱们也提供了后台管理模块(Django-Admin),主要功能是通过后台管理来实现客户端的功能,可以对数据进行增删改查。也可以通过该功能进行二次开发
Django中的mysql配置
在上期内容,我们了解了settings.py配置信息的内容,其中DATABASES是用来管理数据库配置的,默认是sqlite3数据库,所以我们需要将其修改成mysql数据库。
# Database# https://docs.djangoproject.com/en/2.0/ref/settings/#databases# 数据库配置 默认的数据库为sqlite# DATABASES = {# 'default': {# 'ENGINE': 'django.db.backends.sqlite3',# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),# }# }DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', # 数据库引擎 'NAME': 'django_mysql', # 数据库名 'USER': 'root', # 账号 'PASSWORD': 'root', # 密码 'HOST': '127.0.0.1', # HOST 'POST': 3306, # 端口 }}
字段名称代码中都添加了相应说明,ENGINE为MYSQL数据库引擎,这个当然不会凭空出现,需要我们去安装
安装pymysql
pip3 install pymysql
项目中配置
在最开始的项目包下的 init .py中进行如下配置
"""setting中的配置默认为sqlite3数据库 当需要修改成MySql时并且在setting.py的同级目录的__init__.py 加入如下配置否则会报错: Error loading MySQLdb module."""import pymysqlpymysql.install_as_MySQLdb()
如果mysql配置信息错误(用户名、密码、host等)控制台会报如下异常
pymysql.err.OperationalError: (1045, "Access denied for user 'ROOT'@'localhost' (using password: YES)")
在app文件的models.py文件中 创建Student(学生信息)和StudentUnion(社团信息)
models.py:数据模块,用于数据库设计
"""创建学生信息表模型"""from django.db import models""" 该类是用来生成数据库的 必须要继承models.Model"""class Student(models.Model): """ 创建如下几个表的字段 """ # 学号 primary_key=True: 该字段为主键 studentNum = models.CharField('学号', primary_key=True, max_length=15) # 姓名 字符串 最大长度20 name = models.CharField('姓名', max_length=20) # 年龄 整数 null=False, 表示该字段不能为空 age = models.IntegerField('年龄', null=False) # 性别 布尔类型 默认True: 男生 False:女生 sex = models.BooleanField('性别', default=True) # 手机 unique=True 该字段唯一 mobile = models.CharField('手机', unique=True, max_length=15) # 创建时间 auto_now_add:只有在新增的时候才会生效 createTime = models.DateTimeField(auto_now_add=True) # 修改时间 auto_now: 添加和修改都会改变时间 modifyTime = models.DateTimeField(auto_now=True) # 指定表名 不指定默认APP名字——类名(app_demo_Student) class Meta: db_table = 'student'"""学生社团信息表"""class studentUnion(models.Model): # 自增主键, 这里不能设置default属性,负责执行save的时候就不会新增而是修改元素 id = models.IntegerField(primary_key=True) # 社团名称 unionName = models.CharField('社团名称', max_length=20) # 社团人数 unionNum = models.IntegerField('人数', default=0) # 社团负责人 关联Student的主键 即studentNum学号 一对一的关系,on__delete 属性在django2.0之后为必填属性后面会介绍 unionRoot = models.OneToOneField(Student, on_delete=None) class Meta: db_table = 'student_union'"""OneToOneField: 一对一ForeignKey: 一对多ManyToManyField: 多对多(没有ondelete 属性)"""
新闻热点
疑难解答