7django-连接mysql方法-多表联查方法

django2.0.7 + mysql 5.5

步骤1:安装模块

>> pip install mysqlclient==1.3.12


在mysql创建数据库‘db_django’

步骤2:在django项目中配置数据库连接信息
'default': {
        'ENGINE': 'django.db.backends.mysql',
	#数据库名(需要提前创建)
        'NAME': 'db_django',
        #用户名
        'USER':'root',
        # 密码
        'PASSWORD':'root',
        #url 服务器地址
        'HOST':'localhost',
        #端口号
        'PORT':3306,
    }

步骤三:更新应用数据库
>>python manage.py makemigrations
>>python manage.py migrate

步骤四:自定义数据表
方法遵循model生成规则

09a834f662d44d2eea3643810df5202c078.jpg

09a535692f9e52e016cea204e3657c43037.jpg

from django.shortcuts import render
from app.models import Bumen,Emp
from django.http import HttpResponseRedirect
from django.core.paginator import EmptyPage, PageNotAnInteger, Paginator


# Create your views here.
def index(request):
    return render(request,'index.html')

def show(request):
    ref=Bumen.objects.all()
    content={}
    content['deptlist']=ref
    return render(request,'bumen.html',content)

def app(request):
    if request.POST:
        name = request.POST.get('names')
        jianjie = request.POST.get('jianjie')
        Bumen.objects.create(dname=name,djianjie=jianjie)
        print('添加成功')
        return HttpResponseRedirect('/show/')
    else:
        return render(request,'app.html')

def shanchu(request,deptno):
    #Bumen.objects.filter(deptno=deptno).delete()
    Bumen.objects.get(deptno=deptno).delete()
    return HttpResponseRedirect('/show/')

page=1

def xiugai(request,deptno):
    if request.POST:
        name=request.POST.get('names')
        jianjie=request.POST.get('jianjie')
        Bumen.objects.filter(deptno=deptno).update(dname=name,djianjie=jianjie)
        return HttpResponseRedirect('/show/')
    else:
        print(deptno)
        bumen=Bumen.objects.get(deptno=deptno)
        print(bumen)
        content={}
        content['xiu']=bumen
        return render(request,'xiugai.html',content)


def empshow(request):
    ref=Emp.objects.all()
    p=Paginator(ref,2)
    global page
    page=request.GET.get('page')
    try:
        ref=p.page(page)
    except EmptyPage:
        ref=p.page(1)
    except PageNotAnInteger:
        ref=p.page(p.num_pages)
    contont={}
    contont['emplist']=ref
    return render(request,'empshow.html',contont)

def addemp(request):
    if request.POST:
        ename=request.POST.get('ename')
        job=request.POST.get('job')
        hiredata=request.POST.get('hiredata')
        sal=int(request.POST.get('sal'))
        comm=float(request.POST.get('comm'))
        deptno=int(request.POST.get('deptno'))
        dept=Bumen.objects.get(deptno=deptno)
        Emp.objects.create(ename=ename,job=job,hiredata=hiredata,sal=sal,comm=comm,dept=dept)
        return HttpResponseRedirect('/empshow/')
    else:
        depinfo=Bumen.objects.all()
        content={}
        content['deptinfo']=depinfo
        return render(request,'empapp.html',content)

def empshanchu(request,dd):

    Emp.objects.get(empno=dd).delete()

    return HttpResponseRedirect('/empshow/')

def empupdata(request,dd):
    if request.POST:
        ename=request.POST.get('ename')
        job=request.POST.get('job')
        hiredata=request.POST.get('hiredata')
        sal=int(request.POST.get('sal'))
        comm=float(request.POST.get('comm'))
        deptno=int(request.POST.get('deptno'))
        dept=Bumen.objects.get(deptno=deptno)
        print(ename,job,hiredata,sal,comm,deptno,dept)
        Emp.objects.filter(empno=dd).update(ename=ename,job=job,hiredata=hiredata,sal=sal,comm=comm,dept=dept)
        return HttpResponseRedirect('/empshow/?page={0}'.format(page))
    else:
        emp=Emp.objects.get(empno=dd)
        dept=Bumen.objects.all()
        content={}
        content['emp']=emp
        content['dept']=dept
        return render(request,'empxiugai.html',content)
***********************************************************************
from django.db import models

# Create your models here.
class Bumen(models.Model):
    deptno=models.AutoField(primary_key=True)
    dname=models.CharField(max_length=30)
    djianjie = models.CharField(max_length=50)

class Emp(models.Model):
    empno=models.AutoField(primary_key=True)
    ename=models.CharField(max_length=30)
    job=models.CharField(max_length=30)
    hiredata=models.DateTimeField()
    sal=models.IntegerField()
    comm=models.FloatField()
    dept=models.ForeignKey('Bumen',on_delete=models.CASCADE)
***********************************************************************
from django.urls import path
from app.views import show,index,app,shanchu,xiugai
from app.views import empshow,addemp,empshanchu,empupdata

urlpatterns = [
    path('admin/', admin.site.urls),
path('index/', index),
path('show/', show),
path('app/', app),
path('shanchu/<str:deptno>/', shanchu),
path('xiugai/<str:deptno>/', xiugai),
    #emp
path('empshow/',empshow),
path('addemp/',addemp),
path('empshanchu/<str:dd>/', empshanchu),
path('empupdata/<str:dd>/', empupdata),
]








<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h2><a href="/show/">部门管理</a></h2>
<br>
<h2><a href="/empshow/?page=1">员工管理</a></h2>
</body>
</html>

*****************************************************
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>


<h2>添加员工信息</h2>
<form method="post" action="/addemp/">
{% csrf_token %}
    员工姓名:<input type="text" name="ename" placeholder="请输入姓名"><br>
    员工职位:<input type="radio" name="job" value="经理">经理<input type="radio" name="job" value="员工">员工<br>
    入职日期:<input type="datetime-local" name="hiredata"><br>
    基本工资:<input type="text" name="sal" placeholder="请输入工资"><br>
    绩效奖金:<input type="text" name="comm" placeholder="请输入绩效"><br>
    <select name="deptno">
        {% for d in deptinfo %}
        <option value="{{ d.deptno }}">{{ d.dname }}</option>
        {% endfor %}
    </select>
<input type="submit" value="添加员工">
</form>



</body>
</html>
*************************************************************
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    {% load static %}
    <link rel="stylesheet" href="{% static 'style.css' %}">
</head>
<body >
<table border="1px" width="800px" bgcolor="#f0f8ff">
    <tr>
        <td>员工编号</td>
        <td>员工姓名</td>
        <td>员工职位</td>
        <td>入职日期</td>
        <td>员工工资</td>
        <td>员工奖金</td>
        <td>员工部门</td>
        <td>操作</td>
    </tr>
    {% for ee in emplist %}
    <tr>
        <td>{{ ee.empno }}</td>
        <td>{{ ee.ename }}</td>
        <td>{{ ee.job }}</td>
        <td>{{ ee.hiredata |date:'Y年m月d日' }}{{ ee.hiredata |date:'H:i' }}</td>
        <td>{{ ee.sal }}</td>
        <td>{{ ee.comm }}</td>
        <td>{{ ee.dept.dname }}</td>
    <td><a href="/empupdata/{{ ee.empno }}" class="btn btn-outline-success">修改</a >/<a href="/empshanchu/{{ ee.empno }}" class="btn btn-outline-success">删除</a></td>
    </tr>
    {% endfor %}


</table>
<form method="get" action="/addemp/">
    <button type="submit" class="btn btn-outline-success">添加</button>
</form>
<p>
    {% if emplist.has_previous %}
        <a href="?page=1">首页</a>
        <a href="?page={{ emplist.previous_page_number }}">上一页</a>
    {% endif %}
当前页面:{{ emplist.number }}/{{ emplist.paginator.num_pages }}
{% if emplist.has_next %}
        <a href="?page={{ emplist.next_page_number }}">下一页</a>
        <a href="?page={{ emplist.paginator.num_pages }}">尾页</a>
    {% endif %}
</p>

</body>
</html>
*************************************************************
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h2>修改员工信息</h2>
<form method="post" action="/empupdata/{{ emp.empno }}/">
{% csrf_token %}
    员工姓名:<input type="text" name="ename" placeholder="请输入姓名" value="{{ emp.ename }}"><br>
    员工职位:{% ifequal emp.job '经理' %}
    <input type="radio" name="job" value="经理" checked>经理
    <input type="radio" name="job" value="员工">员工<br>
    {% endifequal %}
{% ifequal emp.job '员工' %}
    <input type="radio" name="job" value="经理" >经理
    <input type="radio" name="job" value="员工" checked>员工<br>
    {% endifequal %}
    入职日期:<input type="datetime-local" name="hiredata" value="{{ emp.hiredata |date:'Y-m-d' }}T{{ emp.hiredata |date:'H:i' }}"><br>
    基本工资:<input type="text" name="sal" placeholder="请输入工资" value="{{ emp.sal }}"><br>
    绩效奖金:<input type="text" name="comm" placeholder="请输入绩效" value="{{ emp.comm }}"><br>
    <select name="deptno">
{% for d in dept %}
    {% ifequal d.deptno emp.dept.deptno %}
        <option value="{{ d.deptno }}" selected>{{ d.dname }} </option>
        {% else %}
        <option value="{{ d.deptno }}">{{ d.dname }} </option>

    {% endifequal %}

{% endfor %}
    </select>
<input type="submit" value="修改员工">
</form>

</body>
</html>
*************************************************************

 

转载于:https://my.oschina.net/u/4036782/blog/2963977

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值