Django(1)-简介
Django(2)-创建项目及默认项目目录结构介绍
Django(3)-配置文件详解
Django(4)-URL和视图
Django(5)-路由配置实例
Django(6)-请求及响应
Django(7)-Get请求和Post请求
Django(8)-设计模式
Django(9)-模板层简介与入门实例
Django(10)-模板层的变量和标签
Django(11)-模板层的过滤器和继承
Django(12)-url反向解析
Django(13)-静态文件
Django(14)-应用及分布式路由
Django(15)-模型层及ORM介绍
Django(16)-ORM基础字段及选项
Django(17)-ORM创建数据
Django(18)-ORM常用的查询函数详解及实例演示
Django(19)-ORM条件查询
Django(20)-ORM更新操作及实例演示
Django(21)-ORM删除操作及实例演示
Django(22)-ORM中F对象和Q对象
Django(23)-ORM聚合查询和原生数据库操作
Django(24)-admin后台管理设置步骤以及常见样式详解
Django实战技巧(1)-开发测试生产环境配置切换处理技巧
Django实战技巧(2)-git代码仓分支管理技巧
Django实战技巧(3)-项目配置
1、模型层
- 模型层:负责跟数据库之间进行通信
- Django底层依赖mysqlclient,因此首先需要安装mysqlclient
-
打开 mysqlclient下载地址,然后按FCtrl+F搜索,输入mysqlclient,即可搜索到下载包(whl文件),根据计算机系统位数以及python版本选择对应的安装版本,比如这里选择python3.9,windows 64位机器的安装包
-
然后执行 pip install F:/softare/mysqlclient-1.4.6-cp39-cp39-win_amd64.whl 进行安装
-
pip list ,如下,确认已经安装成功
-
- 若在Centos系统出现如下错误:
ERROR: Command errored out with exit status 1:
command: /root/.local/share/virtualenvs/redrose2100.com-wS0Hl33Y/bin/python -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-pu352hqt/mysqlclient_05d0f83fba2148a7a1252de2911c0c15/setup.py'"'"'; __file__='"'"'/tmp/pip-install-pu352hqt/mysqlclient_05d0f83fba2148a7a1252de2911c0c15/setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-pip-egg-info-f2vazjrs
cwd: /tmp/pip-install-pu352hqt/mysqlclient_05d0f83fba2148a7a1252de2911c0c15/
Complete output (12 lines):
/bin/sh: mysql_config: command not found
/bin/sh: mariadb_config: command not found
/bin/sh: mysql_config: command not found
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/tmp/pip-install-pu352hqt/mysqlclient_05d0f83fba2148a7a1252de2911c0c15/setup.py", line 16, in <module>
metadata, options = get_config()
File "/tmp/pip-install-pu352hqt/mysqlclient_05d0f83fba2148a7a1252de2911c0c15/setup_posix.py", line 61, in get_config
libs = mysql_config("libs")
File "/tmp/pip-install-pu352hqt/mysqlclient_05d0f83fba2148a7a1252de2911c0c15/setup_posix.py", line 29, in mysql_config
raise EnvironmentError("%s not found" % (_mysql_config_path,))
OSError: mysql_config not found
----------------------------------------
WARNING: Discarding http://mirrors.cloud.aliyuncs.com/pypi/packages/4d/38/c5f8bac9c50f3042c8f05615f84206f77f03db79781db841898fde1bb284/mysqlclient-1.4.4.tar.gz#sha256=9c737cc55a5dc8dd3583a942d5a9b21be58d16f00f5fefca4e575e7d9682e98c (from http://mirrors.cloud.aliyuncs.com/pypi/simple/mysqlclient/). Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.
Downloading http://mirrors.cloud.aliyuncs.com/pypi/packages/13/37/6c941aabeb78464a538b7d43266bfae645993779e3ca3e12fe82b4590f52/mysqlclient-1.4.3.tar.gz (86 kB)
|████████████████████████████████| 86 kB 6.0 MB/s
^CERROR: Operation cancelled by user
则依次执行如下命令即可
yum install mysql-devel
pip install mysqlclient
- 在mysql中创建数据库,数据库名通常与项目名称一致,如下:
create database mysite1 default charset utf8;
- 配置Django数据库配置(setting.py),将原sqlite的配置删除或注释掉,然后修改为mysql,配置如下:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'mysite1',
'USER':'root',
'PASSWORD':'xxxxxx',
'HOST':'192.168.1.200',
'PORT':'3306'
}
}
2、什么是模型
- 模型是一个Python类,它是由django.db.models.Model派生出的子类
- 一个模型类代表数据库中的一张数据表
- 模型类中每一个类属性都代表数据库中的一个字段
- 模型是数据交互的接口,是表示和操作数据库的方法和方式
3、ORM框架
- 定义:ORM(Object Relational Mapping)即对象关系映射,它是一种程序技术,它允许你使用类和对象对数据库进行操作,从而避免通过SQL语句操作数据库
- 作用:
- 建立模型类和表之间的的对应关系,允许我们通过面向对象的方式类操作数据库
- 根据设计的模型类生成数据库中的表格
- 通过简单的配置就可以进行数据库的切换
- 优点:
- 只需要面向对象编程,不需要面向数据库编写代码
- 对数据库的操作都转换为类属性和方法的操作
- 不用编写各种数据库的sql语句
- 实现了数据模型与数据库的解耦,屏蔽了不同数据库操作上的差异
- 不再关注用的是mysql,Oracle,还是其他数据库等的内部细节
- 通过简单的配置就可以轻松更换数据库,而不需药修改代码
- 缺点:
- 对于复杂业务,使用成本较高
- 根据对象的操作转换为SQL语句,根据查询的结果转换为对象,在映射过程中有性能的损失
- 映射图:
4、实例
在app中的模型文件中定义一个模型类,如下,用来存储人,包含姓名和年龄两个属性
from django.db import models
# Create your models here.
class Person(models.Model):
name=models.CharField("姓名",max_length=50,default='')
age=models.IntegerField("年龄")
定义按成模型类之后,数据库中并不会有数据表的生成
当模型类的属性发生修改(如增加、删除、修改等)时,即数据库定义发生变声时,需要对数据库进行前移,在项目目录下执行如下两条命令即可
python manage.py makemigrations
python manage.py migrate
如下,表示数据库迁移成功
若执行python manage.py migrate时出现如下错误,则检查setting.py中数据库的用户名密码是否正确
数据库迁移完成后,再次进入数据库后台查看,此时发现数据库中已经存在数据表了,其他数据表示django自带的数据表,在第一次执行这个命令的时候,会同步将这些数据表生成
在数据库中执行 desc app1_person; 命令,查看表中已经创建好了表结构,注意,如果没有指定id,会自动给创建一个id
通过上面的实例可以看出, 表名为:应用名_模型名的小写