栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

案例总结两表连接查询

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

案例总结两表连接查询

创建项目的前提 创建项目和应用

1.在小黑框创建项目

django-admin startproject 项目名
mysql -uroot -p 数据库密码 创建数据库

2.进入pycharm创建子应用

python .manage.py startapp 子应用名

3.配置子应用----在setting.py 文件中

INSTALLED_APPS = [
‘django.contrib.admin’,
‘django.contrib.auth’,
‘django.contrib.contenttypes’,
‘django.contrib.sessions’,
‘django.contrib.messages’,
‘django.contrib.staticfiles’,
‘books’, # 注册子应用
]

4.当需要使用模板页面时,需要配置

TEMPLATES = [
{
‘BACKEND’: ‘django.template.backends.django.DjangoTemplates’,
# 拼接路径,并在根目录下创建templates文件
‘DIRS’: [os.path.join(BASE_DIR, ‘templates’)], BASE_DIR是根目录的意思
‘APP_DIRS’: True,
‘OPTIONS’: {
‘context_processors’: [
‘django.template.context_processors.debug’,
‘django.template.context_processors.request’,
‘django.contrib.auth.context_processors.auth’,
‘django.contrib.messages.context_processors.messages’,
],
},
},
]

5.配置数据库

DATABASES = {
‘default’: {
‘ENGINE’: ‘django.db.backends.mysql’,
‘HOST’: ‘localhost’, # 主机
‘PORT’: 3306, # 端口
‘USER’: ‘root’, # 用户名
‘PASSWORD’: ‘root’, # 密码
‘NAME’: ‘book’, # 数据库名
}
}

5.配置语言和时区

LANGUAGE_CODE = ‘zh-Hans’ # 语言
TIME_ZONE = ‘Asia/Shanghai’ # 时区

6.在同名文件下安装数据库–同名下的__init__.py文件下

import pymysql
pymysql.install_as_MySQLdb() # 安装mysql

7.配置分发路由

《1》:在主文件下的路由

from django.contrib import admin # 主路由
from django.urls import path,include # include是包含的意思
from 子文件 import 在子文件创建的子路由存放的项目(文件)内
#路由分发
urlpatterns = [
path(‘admin/’, admin.site.urls), # 主文件自带的
path(‘’,include(在子文件创建的文件名))
]

《2》:在子组件下的路由

from django.urls import path # 可以复制主文件下的路由
from 子文件 import views
urlpatterns = [
配置路由
]

-----------------------------------------------以上准备工作

数据库中的的命令 1.进入mysql数据库

.mysql -uroot -p

2.查看所有数据库

show databases;

3.如果数据库存在,删除数据库

drop database book;

4.创建数据库

create database book charset=utf8;

5.查询表

show tables;

6.查询表中的内容

select * from 表名;

-----------------------------------------------执行以下的操作

两表连接的models模型类

#文件
from django.db import models
#Create your models here.

员工表

class Department(models.Model):  # 创建的**部门表**
    dep_name=models.CharField(max_length=20,verbose_name='部门名称')  # 给**姓名**配置类型
    desc=models.CharField(max_length=20,verbose_name='部门描述')# 给**部门**配置类型
    # 为了创建的表更加美观
    class Meta:
        verbose_name='部门表'   # 在**超级用户**里面显示的
        verbose_name_plural=verbose_name  # 减去表名后加**‘s'复数**这一类型
        db_table='deparment'			# 在**小黑框**中迁移所有的表中自己创建的**表更直观**
    def __str__(self):
        return self.dep_name    # 用于在python manage.py shell 出现的效果

部门表:

class Employee(models.Model):  # 创建的**员工表**
    emp_name=models.CharField(max_length=20,verbose_name='姓名')
    job=models.CharField(max_length=20,verbose_name='职位')
    salary=models.DecimalField(max_digits=5,decimal_places=2,verbose_name='工资')   # .***DecimalField***是浮点型  max_digits 最大长度(包括小数点以后)decimal_places 小数点保留2为小数*********
    
    deparment=models.ForeignKey(Department,on_delete=models.CASCADE,verbose_name='部门')
    # 设置外键  ForeignKe    Department 部门表  on_delete 指明主表删除数据时,对于外键引用表数据如何处理  models.CASCADE 删除主表数据时连通一起删除外键表中数据*******
生成迁移

python manage.py makemigrations

执行迁移

python mange.py migrate

在子文件下admin.py文件下配置注册表

from django.contrib import admin
from 子组件.models import 定义的表1,表2
#Register your models here.
admin.site.register(表1)
admin.site.register(表2)

创建超级用户

python manage.py createsuperuser
在admin上添加数据

功能的实现 子路由上的信息

from django.urls import path
from myapp import views
urlpatterns = [
path(‘dep/’,views.DepView.as_view()), # 主页面上的路由
path(‘emp/int:id/’,views.EmpView.as_view()), # 配置动态路由
path(‘del/int:id/’,views.DelView.as_view()),# 配置动态路由
path(‘xiu/int:id/’,views.XiuView.as_view()),# 配置动态路由
]

在templates中创建HTML文件 主页面上渲染数据



    
    Title


    部门页面    # 主页面提示语
    
        {% for dep in dep %}			# 循环输出数据
            
        {% endfor %}
    
编号 部门名称 部门描述
{{ dep.id }} { dep.id}}/">{{ dep.dep_name }} {{ dep.desc }}
{% csrf_token %} 姓名:
职位:
工资:
部门:

from django.shortcuts import render,redirect
from django.http import HttpResponse
from myapp.models import Department,Employee
from django.views import View

在子页面上定义动态路由,主页面与子的关联设置超链接进行连接显示子表上的数据 在子上配置删除和修改的连接



    
    Title


    员公页面
        
            {% for emp in emp %}
                
            {% endfor %}

    
编号 姓名 职位 工资 部门 操作
{{ emp.id }} {{ emp.emp_name }} {{ emp.job }} {{ emp.salary }} {{ emp.deparment_id}} { emp.id }}/">删除 { emp.id}}/">修改
创建修改的HTML文件



    
    Title


        
method post方法 {% csrf_token %} # 防止出现异常 姓名: 职位: 工资: 部门:
在views模板页面展示数据 展示所有的部门的信息,添加员工信息
class DepView(View):
    def get(self,request):				# 讲数据库的数据获取到主页面上
        dep=Department.objects.all()
        return render(request,'dep.html',{'dep':dep})
    # 添加员工信息
    def post(self,request):			# 获取每一条数据的信息
        emp_name=request.POST.get('emp_name')
        job=request.POST.get('job')
        salary=request.POST.get('salary')
        deparment=request.POST.get('dep')
        try: # 排除异常的可能性
            Employee.objects.create(
                emp_name=emp_name,
                job=job,
                salary=salary,
                deparment_id=deparment,
            )
        except Employee as e:
            print(e)
            return HttpResponse('添加失败')
        return redirect('/dep/')
渲染子表
class EmpView(View):
    def get(self,request,id):
        emp=Employee.objects.filter(deparment_id=id)			# 获取数据库中的id
        return render(request,'emp.html',{'emp':emp})			
删除的功能
class DelView(View):
    def get(self,request,id):
        # 法1
       emp_ddata=Employee.objects.get(id=id)
       id_data=emp_ddata.deparment_id
       emp_ddata.delete()
       return redirect(f'/emp/{id}/')
       # 法2
       # Employee.objects.filter(id=id).delete()		# delete是删除的意思
       # return redirect('/dep/')								# 重定向到主页面
实现修改
class XiuView(View):
    def get(self,request,id):		# 获取数据库中的数据 id参数传入
        xiu_data=Employee.objects.get(id=id)
        return render(request,'xiu.html',{"xiu":xiu_data})
    def post(self,request,id):					# 采用POST 的方法获取数据库中的数据
        emp_name=request.POST.get('emp_name')
        job=request.POST.get('job')
        salary=request.POST.get('salary')
        department=request.POST.get('department')
        try:
            Employee.objects.filter(id=id).update(   # 将数据库中的数据  update修改数据
                emp_name=emp_name,
                job=job,
                salary=salary,
                deparment_id=department,		
            )
        except Exception as e:
            print(e)
            return HttpResponse('失败')  # 出现异常执行的提示语
        return redirect('/dep/')  # 重定向到主页面
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/844118.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号