一、模型操作
- 配置数据库
默认使用sqlite
- 定义模型类
# 定义 学生 模型类
class Student(models.Model):
# id、name、age、math、english、chinese
# 默认Django会自动创建
name = models.CharField(max_length=100)
age = models.IntegerField()
math = models.IntegerField()
english = models.IntegerField()
chinese = models.IntegerField()
- 生成迁移文件
python manage.py makemigrations
python manage.py makemigrations Meituan
备注: 只是生成,并没有执行,所以表单还没创建!!!!
- 执行迁移文件
python manage.py migrate
- 模型操作(数据库的数据操作)
增删改查
二、ORM
-
概述
对象关系映射。O对象, R关系,M映射 -
作用
将对象操作转换为数据库操作,屏蔽掉不同数据库的操作!
关注点是数据的业务逻辑处理,而不是关注数据库的具体操作!
三、属性定义
- 数据类型
- AutoField 自增长(前提主键)
- CharField 字符串
- IntegerField 整形
- FloatField 浮点型
- DecimalField 浮点型 【设置显示位数】
max_digits 总长度
decimal_places 小数点后几位
- BooleanField 布尔类型
- NullBooleanField 支持null/true/flase
- DateField 日期
auto_now = True 每次保存对象时都会更新当前时间
auto_now_add = True 第一次被创建时,设置为当前时间
- TimeField 时间
auto_now = True 每次保存对象时都会更新当前时间
auto_now_add = True 第一次被创建时,设置为当前时间
- DateTimeField 日期+时间
auto_now = True 每次保存对象时都会更新当前时间
auto_now_add = True 第一次被创建时,设置为当前时间
- FileField 文件
- ImageField 图片
- 约束
- null 设置null=True可以为空,null=False不能为空
- primary_key 设置True标识为主键
- unique 设置True唯一标示
- db_colum 设置字段名,没指定属性名即为字段名
- db_index 设置为索引
- blank 设置为True,表示可以为空白
- 关系
- 一对一
OneToOneField
- 一对多
ForeignKey
- 多对多
ManyToManyField
都是通过外键实现!!!
四、数据查询
- 数据集
- all() 全部
- filter() 过滤符合条件
- exclude() 去除符合条件
- order_by() 排序
- [x:y] 切片
- 单个数据
- get()
- first()
- last()
- 聚合函数
Max()、Min()、Sum()、Avg()、Count()
m_chinese = Student.objects.aggregate(Max('chinese'))
# 结果 :{'chinese__max': 80}
- F对象
在同一个记录中(对象),对应的属性比较; [自己的属性间比较]
# 语文成绩 大于 英语成绩的 学生信息
students = Student.objects.filter(chinese__gt=F('english'))
- Q对象
条件封装,封装之后,可以进行与或非操作!
# 语文成绩大于80 或 数学成绩大于60 的学生信息
students = Student.objects.filter(Q(chinese__gt=80) | Q(math__gt=60))
# 英语成绩大于60
# students = Student.objects.filter(english__gt=60)
students = Student.objects.filter( ~Q(english__lte=60) )
五、数据操作
- 增
实例化对象
对象赋值
添加到数据 save()
- 删
找到对应的数据
调用删除方法 delete()
- 改
找到对应的数据
更新对象
同步到数据库 save()
- 查
根据不同条件,获取对应的数据
六、数据库配置
- sqlite配置(系统默认)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
- mysql
# 工程目录下__init__.py中添加
import pymysql
pymysql.install_as_MySQLdb()
# 工程目录下settings.py中
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
# create database szpython18091023 charset=utf8;
'NAME': 'szpython18091023', # 连接数据库的名称 【前提是数据库中得有这个数据库】
'USER': 'root', # 数据库用户名
'PASSWORD': '123456', # 数据库密码
'HOST': '127.0.0.1', # 主机
'POST': '3306' # 端口号
}
}
前提: pip install pymysql
网友评论