【Django】教程-3-数据库干系介绍

打印 上一主题 下一主题

主题 1888|帖子 1888|积分 5664

【Django】教程-1-安装+创建项目+目录布局介绍
【Django】教程-2-前端-目录布局介绍
4.数据库连接配置

须要手动创建数据库,数据库无法自动创建 ,ORM可以创建表,操纵表
注意:负责app下mondels.py写类时,无法在数据库中创建表。


  • 配置 静态文件路径 & 模板的路径templates(发起放在app目录下)
  • 配置数据库干系操纵
4.1 第三方模块(django3版本)

  1. pip install mysqlclient
  2. # 或者手动下载安装whel包下载下来安装
复制代码


  • 自己先去mysql创建一个数据库
  • 配置数据库连接,在settings中
    1. DATABASES ={
    2.         'default' :{
    3.                 'ENGINE':'djang.db.backends.mysql',
    4.         'NAME':'gx_day16', # 数据库名字
    5.         'USER':'root',
    6.         'PASSWORD':'root123',
    7.         'HOST':'127.0.0.1', # 对应机器
    8.         'PORT':'3306'
    9.         }
    10. }
    复制代码
4.2 示例:

  1. from django.db import models
  2. class UserInfo(models.Model):
  3.     """ 用户表 """
  4.     name = models.CharField(verbose_name="姓名", max_length=32)
  5.     password = models.CharField(max_lenght=64)
  6.     age = models.IntegerField()
  7.    
  8. '''
  9. 相当于创建了下面这个表:表名=应用名+类名
  10. create table app01_userinfo(
  11.         id bigint_auto_increment primary key,
  12.         name varchar(32),
  13.         password varchar(64),
  14.         age int
  15. )
  16. '''
  17. class Department(models.Model):
  18.     title = models.CharField(max_length=16)
  19.    
  20. # class Role(models.Model):
  21. #     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
    1. from django.db import models
    2. class Admin(models.Model):
    3.     """管理员"""
    4.     username = models.CharField(verbose_name="用户名", max_length=32)
    5.     password = models.CharField(verbose_name="密码", max_length=64)
    6.     def __str__(self):
    7.         return self.username
    8. class Department(models.Model):
    9.     """部门表"""
    10.     # id = models.BigAutoField(verbose_name="ID", primary_key=True)
    11.     # id = models.AutoField(verbose_name="ID", primary_key=True)
    12.     title = models.CharField(verbose_name="标题", max_length=32)
    13. def __str__(self):
    14.     return self.title
    复制代码
  • 执行两个下令:(删除表,列,都是执行这个下令,如果新建列,已有数据,须要default=xxx,赋值)
    1. python manage.py makemigrations
    2. python manage.py migrate
    复制代码
5. ORM操纵

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

  1. Department.object.create(title="销售部")
  2. # 本质 :insert into app01_department(title)values("销售部")
  3. UserInfo.object.create(name="特朗普", password="123", age=19)
复制代码
5.2 删

  1. # 全部删除
  2. UserInfo.object.all().delete()
  3. # 条件删除
  4. UserInfo.object.filter(id=3).delete()
复制代码
5.3 查

  1. # 全部查询, 返回 QuerySet类型对象
  2. data_list = UserInfo.object.all()
  3.         for obj in data_list:
  4.                 print(obj.id, obj.name, obj.password, obj.age)
  5.         
  6. # 条件查询 , 返回 QuerySet类型对象  
  7. data_list2 = UserInfo.object.filter(id=1)
  8. # 返回一行obj对象
  9. data_first = UserInfo.object.filter(id=1).first() # 返回一行obj对象
  10. print(data_first.id, data_first.name, data_first.password, data_first.age)
复制代码
5.4 改

  1. # 全部更新
  2. UserInfo.object.update(password=999)
  3.   
  4. # 条件查询 ,更新  
  5. UserInfo.object.filter(id=1).update(age=99)
  6. # 返回一行obj对象
  7. data_first = UserInfo.object.filter(id=1).first() # 返回一行obj对象
  8. print(data_first.id, data_first.name, data_first.password, data_first.age)
复制代码
  如果 表单 get 请求与 post 请求,同一个地址,action属性 可以不写
  在这个页面可以直接运行 startapp app01 创建项目 ,然后去注册
  1. python manage.py makemigrations
  2. python manage.py migrate
复制代码
可以在下面菜单中,直接输入,更新数据库更方便
makemigrations
migrate

6. 关联关系

models.py 文件
  1. class Department(models.Model):
  2.     '''部门表 '''
  3.     title =models.CharField(verbose_name='标题',max_length=32)
  4. class UserInfo(models.Model):
  5.     '''员工表 '''
  6.     name = models.CharField(verbose_name="姓名",max_length=16)
  7.     password = models.CharField(verbose_name="密码",max_length=64)
  8.     age = models.IntegerField(verbose_name="年龄")
  9.     account = models.DecimalField(verbose_name="账户余额",max_digits=18,decimal_places=2,default=8)
  10.     create_time = models.DateTimeField( verbose_name="入职时间")
  11.     #无约束
  12.     #depart_id = models.BigIntegerField(verbose_name=“部门ID")
  13.     #1.有约束
  14.     #  - to,与哪张表关联
  15.     #  - to_field,表中的那一列关联
  16.     #2.django自动
  17.     #  - 写的depart
  18.     #  - 生成数据列 depart_id
  19.     #3.部门表被删除
  20.     ## 3.1级联删除
  21.     depart = models.ForeignKey(to="Department", to_field="id", on_delete=models.CASCADE)
  22.     ### 3.2置空
  23.     #depart= models.ForeignKey(to="Department", to_field="id", null=True, blank=True, on_delete=models.SET_NULL)
  24.    
  25.     # 在django中做的约束
  26.     gender_choices = (
  27.     (1,"男"),
  28.     (2,"女"),
  29.     )
  30.     gender = models.SmallIntegerField(verbose_name="性别",choices=gender_choices)
复制代码
  部门列表展示,页面调解
  7. 放在了上一篇文章结尾部门,由于是前端干系

8.数据处理

8.1 时间格式

后端python
  1. .strftime("%Y-%m-%d")
复制代码
前端:模版语法
  1. <td>{{ obj.create_time|date:"Y-m-d H:i:s" }}</td>
复制代码
8.2 关联处理,非表

后端python
  1. # gender_choices = (
  2. #    (1,"男"),
  3. #    (2,"女"),
  4. #    )
  5. #    gender = models.SmallIntegerField(verbose_name="性别",choices=gender_choices)
  6. obj.gender
  7. obj.get_gender_display() # get_字段名_display()
复制代码
前端:模版语法
  1. <td>{{ obj.get_gender_display }}</td>
复制代码
8.3 关联表处理

后端python
  1. obj.depart_id # 获取数据库中存储的那个字段值
  2. obj.depart.title # 根据id自动关联表中的那一行数据depart对象,然后去.title
复制代码
前端:模版语法
  1. <td>{{ obj.depart.title }}</td>
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

杀鸡焉用牛刀

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表