【Django】教程-3-数据库相关介绍

【Django】教程-1-安装+创建项目+目录结构介绍
【Django】教程-2-前端-目录结构介绍

4.数据库连接配置

需要手动创建数据库,数据库无法自动创建 ,ORM可以创建表,操作表

注意:负责app下mondels.py写类时,无法在数据库中创建表。

  • 配置 静态文件路径 & 模板的路径templates(建议放在app目录下)
  • 配置数据库相关操作

4.1 第三方模块(django3版本)

python 复制代码
pip install mysqlclient
# 或者手动下载安装whel包下载下来安装
  • 自己先去mysql创建一个数据库

  • 配置数据库连接,在settings中

    python 复制代码
    DATABASES ={
    	'default' :{
    		'ENGINE':'djang.db.backends.mysql',
            'NAME':'gx_day16', # 数据库名字
            'USER':'root',
            'PASSWORD':'root123',
            'HOST':'127.0.0.1', # 对应机器
            'PORT':'3306'
    	}
    }

4.2 示例:

python 复制代码
from django.db import models

class UserInfo(models.Model):
    """ 用户表 """
    name = models.CharField(verbose_name="姓名", max_length=32)
    password = models.CharField(max_lenght=64)
    age = models.IntegerField()
    
'''
相当于创建了下面这个表:表名=应用名+类名
create table app01_userinfo(
	id bigint_auto_increment primary key,
	name varchar(32),
	password varchar(64),
	age int
)

'''

class Department(models.Model):
    title = models.CharField(max_length=16)
    
# class Role(models.Model):
#     title = models.CharField(max_lenght=16)

前提:app已经注册,目录切换到项目目录下,有manage.py 文件

python manage.py makemigrations

python manage.py migrate

新增列时,需要给予 默认值,status = models.CharField(default=1)

data = models.CharField(null=True, blank=True) 都是空值

  • 在app目录下,编写model.py

    python 复制代码
    from django.db import models
    
    class Admin(models.Model):
        """管理员"""
        username = models.CharField(verbose_name="用户名", max_length=32)
        password = models.CharField(verbose_name="密码", max_length=64)
    
        def __str__(self):
            return self.username
    
    class Department(models.Model):
        """部门表"""
        # id = models.BigAutoField(verbose_name="ID", primary_key=True)
        # id = models.AutoField(verbose_name="ID", primary_key=True)
        title = models.CharField(verbose_name="标题", max_length=32)
    
    def __str__(self):
        return self.title
  • 执行两个命令:(删除表,列,都是执行这个命令,如果新建列,已有数据,需要default=xxx,赋值)

    复制代码
    python manage.py makemigrations
    python manage.py migrate

5. ORM操作

python 复制代码
# apps.py 中有,对于主见的添加描述 
from django.apps import AppConfig
# 需要去settings中注册
class ApptangConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'appTang'

5.1 增

python 复制代码
Department.object.create(title="销售部")
# 本质 :insert into app01_department(title)values("销售部")

UserInfo.object.create(name="特朗普", password="123", age=19)

5.2 删

python 复制代码
# 全部删除
UserInfo.object.all().delete()
# 条件删除
UserInfo.object.filter(id=3).delete()

5.3 查

python 复制代码
# 全部查询, 返回 QuerySet类型对象
data_list = UserInfo.object.all()
	for obj in data_list:
		print(obj.id, obj.name, obj.password, obj.age)
        
# 条件查询 , 返回 QuerySet类型对象  
data_list2 = UserInfo.object.filter(id=1)
# 返回一行obj对象
data_first = UserInfo.object.filter(id=1).first() # 返回一行obj对象
print(data_first.id, data_first.name, data_first.password, data_first.age)

5.4 改

python 复制代码
# 全部更新
UserInfo.object.update(password=999)
  
# 条件查询 ,更新  
UserInfo.object.filter(id=1).update(age=99)
# 返回一行obj对象
data_first = UserInfo.object.filter(id=1).first() # 返回一行obj对象
print(data_first.id, data_first.name, data_first.password, data_first.age)

如果 表单 get 请求与 post 请求,同一个地址,action属性 可以不写

在这个页面可以直接运行 startapp app01 创建项目 ,然后去注册

python 复制代码
python manage.py makemigrations
python manage.py migrate

可以在下面菜单中,直接输入,更新数据库更方便

makemigrations

migrate

6. 关联关系

models.py 文件

python 复制代码
class Department(models.Model):
    '''部门表 '''
    title =models.CharField(verbose_name='标题',max_length=32)
class UserInfo(models.Model):
    '''员工表 '''
    name = models.CharField(verbose_name="姓名",max_length=16)
    password = models.CharField(verbose_name="密码",max_length=64)
    age = models.IntegerField(verbose_name="年龄")
    account = models.DecimalField(verbose_name="账户余额",max_digits=18,decimal_places=2,default=8)
    create_time = models.DateTimeField( verbose_name="入职时间")
    #无约束
    #depart_id = models.BigIntegerField(verbose_name="部门ID")
    #1.有约束
    #  - to,与哪张表关联
    #  - to_field,表中的那一列关联
    #2.django自动
    #  - 写的depart
    #  - 生成数据列 depart_id
    #3.部门表被删除
    ## 3.1级联删除
    depart = models.ForeignKey(to="Department", to_field="id", on_delete=models.CASCADE)
    ### 3.2置空
    #depart= models.ForeignKey(to="Department", to_field="id", null=True, blank=True, on_delete=models.SET_NULL)
    
    # 在django中做的约束
    gender_choices = ( 
    (1,"男"),
    (2,"女"),
    )
    gender = models.SmallIntegerField(verbose_name="性别",choices=gender_choices)

部门列表展示,页面调整

7. 放在了上一篇文章结尾部分,因为是前端相关

8.数据处理

8.1 时间格式

后端python

python 复制代码
.strftime("%Y-%m-%d")

前端:模版语法

html 复制代码
<td>{{ obj.create_time|date:"Y-m-d H:i:s" }}</td>

8.2 关联处理,非表

后端python

python 复制代码
# gender_choices = ( 
#    (1,"男"),
#    (2,"女"),
#    )
#    gender = models.SmallIntegerField(verbose_name="性别",choices=gender_choices)

obj.gender
obj.get_gender_display() # get_字段名_display()

前端:模版语法

html 复制代码
<td>{{ obj.get_gender_display }}</td>

8.3 关联表处理

后端python

python 复制代码
obj.depart_id # 获取数据库中存储的那个字段值
obj.depart.title # 根据id自动关联表中的那一行数据depart对象,然后去.title

前端:模版语法

html 复制代码
<td>{{ obj.depart.title }}</td>
相关推荐
仰望星空的凡人7 小时前
【JS逆向基础】数据库之MongoDB
javascript·数据库·python·mongodb
F_D_Z7 小时前
【PyTorch】图像多分类项目部署
人工智能·pytorch·python·深度学习·分类
pingzhuyan8 小时前
python入门篇12-虚拟环境conda的安装与使用
python·ai·llm·ocr·conda
香蕉可乐荷包蛋8 小时前
排序算法 (Sorting Algorithms)-Python示例
python·算法·排序算法
菜鸟学Python10 小时前
Python web框架王者 Django 5.0发布:20周年了!
前端·数据库·python·django·sqlite
旧时光巷12 小时前
【机器学习-4】 | 集成学习 / 随机森林篇
python·随机森林·机器学习·集成学习·sklearn·boosting·bagging
Ice__Cai12 小时前
Django + Celery 详细解析:构建高效的异步任务队列
分布式·后端·python·django
半新半旧12 小时前
4.DRF 认证--Authentication4.DRF 认证--Authentication
django
MediaTea12 小时前
Python 库手册:doctest 文档测试模块
开发语言·python·log4j
2025年一定要上岸12 小时前
【pytest高阶】源码的走读方法及插件hook
运维·前端·python·pytest