目 录
一、连接数据库
在Django的settings中修改DATABASES
Django连接数据库使用的是mysqlclient,下载命令:
python install mysqlclient
DATABASES = {
"default": {
"ENGINE": "django.db.backends.mysql",
"HOST": DATABASE_HOST,
"PORT": DATABASE_PORT,
"USER": DATABASE_USER,
"PASSWORD": DATABASE_PASSWORD,
"NAME": DATABASE_NAME,
}
}
二、编写类
2.1 编写类
修改models.py文件,编写的类Django会通过命令创建相对应的数据库表
表名格式:App名称+类名小写
from django.db import models
class UserInfo(models.Model):
"""
用户表
"""
name = models.CharField(verbose_name="姓名", max_length=16)
age = models.IntegerField(verbose_name="年龄")
email = models.CharField(verbose_name="邮箱", max_length=32)
2.2 同步数据库
makemigrations:读取已经注册所有的app中的models.py文件,根据类生成被指文件并放在app下的migrations目录下
python manage.py makemigrations
migrate:根据配置文件自动生成相应的SQL语句
python manage.py migrate
2.3 模型字段属性【待更新,不全】
字段属性 | 含义 |
---|---|
max_length | 最大长度 |
verbose_name | 字段备注 |
db_column | 重新定义字段名称 |
max_digits | 浮点型最大长度 |
decimal_places | 小数点位数 |
auto_now = True | 获取的是当前时间 |
null = True | 可为空,默认是不为空 |
blank= True | 可为空,默认是不为空 |
default | 默认值 |
primary_key=True | 主键 |
null与blank的区别与联系:
- blank用于表单的认证,被设为blank=False(默认为False)的字段在填写表单时不能为空
- null用于规定数据库中的列的非空性,被设为null=False(默认为False)的字段在数据库中对应的列不能为空
2.4 模型字段类型【待更新,不全】
字段类型 | 含义 | 演示 |
---|---|---|
CharField | varchar | models.CharField(max_length=64, db_column=‘from_code’) |
IntegerField | int | models.IntegerField(db_column=‘total’, null=True, blank=True) |
DecimalField | float | |
DateField | date | |
Datetime | datetime | |
BinaryField | longblob | models.BinaryField(db_column=‘node_info’, null=True, blank=True) |
三、CRUD操作
3.1 新增
- 方式一
model.UserInfo.objects.create(name="张三", age=14, emial="xxx@qq.com")
- 方式二
model.UserInfo.objects.create(**{"name": "张三", "age": 14, "emial": "xxx@qq.com"})
3.2 查询
all()查询,如果没有查询到则返回[]列表,可以使用Boolean类型进行判断
first()查询,如果没有查询到则返回None类型
3.2.1 查询全部
model.UserInfo.objects.all()
3.2.2 查询第一条数据
model.UserInfo.objects.first()
3.2.3 条件查询
model.UserInfo.objects.filter(name="张三").first()
- filter的其他参数【待更新,不全】
参数 | 含义 |
---|---|
__gt | 大于 |
__gte | 大于等于 |
__lt | 小于 |
__lte | 小于等于 |
__in | 存在于一个list范围内 |
__startswith | 以…开头 |
__istartswith | 以…开头 忽略大小写 |
__endswith | 以…结尾 |
__iendswith | 以…结尾,忽略大小写 |
__range | 在…范围内 |
__year | 日期字段的年份 |
__month | 日期字段的月份 |
__day | 日期字段的日 |
3.2.4 排序查询
- 正序
model.UserInfo.objects..order_by('age').all()
- 倒叙
model.UserInfo.objects..order_by('-age').all()
3.2.5 动态查询
def getKwargsEqual(params, times=None):
"""
判断参数是否为None
"""
kwargs = {}
keys = params.keys()
for key in keys:
if params.get(key) is not None:
kwargs[key] = params.get(key)
return kwargs
queryset = formWork.objects.filter(**kwargs).all()
3.3 删除
先查询出数据之后,在进行删除
3.3.1 全部删除
model.UserInfo.objects.all().delete()
3.3.2 条件删除
model.UserInfo.objects.filter(name="张三").delete()
3.4 修改
先查询出数据之后,在进行修改
3.4.1 全部修改
model.UserInfo.objects.all().update(age=19)
3.4.2 条件修改
model.UserInfo.objects.filter(name="张三").update(age=19)