一、Django配置MySQL
1、安装mysqlclient(版本mysqlclient 1.3.13以上)。
安装前确认Ubuntu是否安装python3-dev和default-libmysqlclient-dev:
(1)查看依赖
sudo apt list –installed|grep -E ‘libmysqlclient-dev|python3-dev’
(2)若无,则安装依赖
sudo apt-get install python3-dev default-libmysqlclient-dev
(3)安装mysqlclient
sudo pip3 install mysqlclient
(4)查看mysqlclient是否安装成功
sudo pip3 freeze|grep -i 'mysql'
2、创建数据库
(1)进入mysql数据库:
create database 数据库名default charset utf8;
通常数据库名跟项目名一致
(2)settings.py配置数据库
修改DATABASES配置项,将sqlite3改为mysql
- ENGINE:指定数据库存储引擎
- NAME:数据库名
- USER:登录数据库用户名
- PASSWORD:数据库密码
- HOST/POST:数据IP和端口
例:settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
# 'NAME': BASE_DIR / 'db.sqlite3',
'NAME': 'mysite1',
'USER': 'root',
'PASSWORD':'123',
'HOST': 'localhost',
'PORT':'3306'
}
}
三、模型和ORM
1、模型
- 模型是一个python类,有django.db.models.Model派生出来的子类。
- 一个模型来代表数据库中的一张数据库表
- 模型类中每个类属性都代表数据库中的一个字段
- 模型是数据交互的接口,是表示和操作数据库的方法和方式
- 模型是一个python类,有django.db.models.Model派生出来的子类。
- 一个模型来代表数据库中的一张数据库表
- 模型类中每个类属性都代表数据库中的一个字段
- 模型是数据交互的接口,是表示和操作数据库的方法和方式
例:模型类创建
from django.db import models class 模型类型(models.Model): 字段名 = models.字段类型(字段类型)
2、ORM
(1)定义
ORM(Object Relational Mapping)即对象关系映射,是一种程序数据,允许你使用类和对象对数据库进行操作,从而避免sql语句操作数据里。
(2)作用
- 建立模型和表之间的对于关系,允许我们通过面向对象的方式来操作数据库;
- 根据设计的模型类生成数据库中的表格;
- 通过简单的配置就可进行数据库的切换。
(3)优点
- 只需面向对象编程,不需要面向数据库编写代码:
- 实现了数据模型与数据的解耦,屏蔽不同数据操作上的差异
(4)缺点
- 对于复杂业务,使用成本高
- 根据对象的操作转换成sql语句,根据查询的结果转换成对象,在映射过程中有性能损失。
3、数据库迁移
迁移是Django同步您对模型所做更改(添加字段,删除模型等)到你的数据库模型的方式。
(1)生成迁移文件:python3 manage.py makemigrations
将应用下的models.py文件生成一个中间文件,并保存在migrations文件夹中。
(2)执行迁移脚本程序:python3 manage.py migrate
执行迁移程序实现迁移。将每个应用下的migrations目录中的中间文件同步回数据库。
例:
(1)创建应用:
python3 manage.py startapp bookstore
(2)注册应用:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'music',
'bookstore',
]
(3)bookstore/model.py
from django.db import models
class Book(models.Model):
title = models.CharField('书名', max_length=50, default='')
price = models.DecimalField('价格', max_digits=7, decimal_places=2)
(4)生成迁移文件
python3 manage.py makemigrations
(5)执行迁移脚本
python3 manage.py migrate



