1. 程式人生 > 實用技巧 >Python Django學習之資料庫

Python Django學習之資料庫

接https://www.cnblogs.com/rainbow-tan/p/13385754.html

1、建立資料庫

create database DjangoDB default charset=utf8;

2、配置資料庫資訊

在settings.py中新增程式碼

3、建立資料庫模型

python D:\Python37\Scripts\django-admin.py startapp Model

建立後項目目錄

4、settings.py配置模型

5、下載並配置mysql包

參考https://www.cnblogs.com/rainbow-tan/p/13385754.html

安裝命令

pip install mysqlclient-1.2.10-cp27-cp27m-win32.whl

settings.py同級目錄中的__init__.py新增程式碼

import pymysql

pymysql.install_as_MySQLdb()

6、定義表結構

在models.py中新增程式碼

from django.db import models

# Create your models here.
class user_info(models.Model):
    account = models.CharField(max_length=20,primary_key=True,null=False)
    password
=models.CharField(max_length=20,null=False) username=models.CharField(max_length=20,null=True) birthday=models.DateTimeField(null=True) sex=models.CharField(max_length=8,null=True)

7、與資料庫互動

python manage.py migrate
python manage.py makemigrations Model
python manage.py migrate Model

執行後資料庫如下

如果出現錯誤提示raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.__version__)

則註釋D:\Python37\Lib\site-packages\django\db\backends\mysql\base.py中錯誤提示程式碼(原因是MySQLclient不支援python3.4以上)

8、增刪改查

在settings.py同級新增dbmode.py

from django.db import models

# Create your models here.
class user_info(models.Model):
    account = models.CharField(max_length=20,primary_key=True,null=False)
    password=models.CharField(max_length=20,null=False)
    username=models.CharField(max_length=20,null=True)
    birthday=models.DateTimeField(null=True)
    sex=models.CharField(max_length=8,null=True)

(1)增加

在login.html同級新增database.html

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>資料庫測試</title>
    <link rel="stylesheet" href="/static/css/bootstrap.min.css">
    <link rel="stylesheet" href="/static/bootstrap-datetimepicker-master/css/bootstrap-datetimepicker.min.css">

    <script src="/static/js/jquery-1.11.3.min.js"></script>
    <script src="/static/js/bootstrap.min.js"></script>
    <script src="/static/bootstrap-datetimepicker-master/js/bootstrap-datetimepicker.min.js"></script>

    
</head>
<button class="btn btn-primary btn-lg" data-toggle="modal" data-target="#addModal">
    增加
</button>
<!-- 模態框(Modal) -->
<div class="modal fade" id="addModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal" aria-hidden="true">
                    &times;
                </button>
                <h4 class="modal-title" id="myModalLabel">
                    增加使用者資訊
                </h4>
            </div>
            <div class="modal-body">
                
                <div>
                    <form class="form-horizontal" role="form" action="/add_user/" method="POST">
                        {% csrf_token %}
                        <div class="form-group">
                          <label for="firstname" class="col-sm-2 control-label">使用者名稱</label>
                          <div class="col-sm-10">
                            <input type="text" class="form-control" name='account' id="firstname" placeholder="">
                          </div>
                        </div>
                        <div class="form-group">
                          <label for="lastname" class="col-sm-2 control-label">密碼</label>
                          <div class="col-sm-10">
                            <input type="text" class="form-control" name='password' id="lastname" placeholder="">
                          </div>
                        </div>
                        <div class="form-group">
                            <label for="lastname" class="col-sm-2 control-label">姓名</label>
                            <div class="col-sm-10">
                              <input type="text" class="form-control" name="username" id="lastname" placeholder="">
                            </div>
                          </div>
                          <div class="form-group">
                            <label for="lastname"  class="col-sm-2 control-label">生日</label>
                            <div class="col-sm-10">
                              <input type="text" name='birthday' class="form-control" id="birthday" placeholder="2020-06-02">
                            </div>
                          </div>
                          <div class="form-group">
                            <label for="lastname" class="col-sm-2 control-label">性別</label>
                            <div class="col-sm-10" >
                            <select class="form-control" name="sex"> 
                              <option>男</option>
                              <option>女</option>
                            </select></div>
                           
                          </div>
                        <div class="form-group">
                            <div class="col-sm-offset-2 col-sm-10">
                                <button type="submit" class="btn btn-default">新增</button>
                                <button type="button" class="btn btn-default"  data-dismiss="modal">關閉</button>
                              </div>
                        </div>
                      </form>
                </div>
            </div>
        </div>
    </div>
</div>
<body >
   
</body>
<script>
   $(function(){
   

   })
</script>

</html>

urls.py新增

執行

資料庫資料

(2)查詢

database.html

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>資料庫測試</title>
    <link rel="stylesheet" href="/static/css/bootstrap.min.css">
    

    <script src="/static/js/jquery-1.11.3.min.js"></script>
    <script src="/static/js/bootstrap.min.js"></script>
    

    
</head>
<button class="btn btn-primary btn-lg" data-toggle="modal" data-target="#addModal">
    增加
</button>
<a href="/select_user">
    查詢
</a>
<!-- 模態框(Modal) -->
<div class="modal fade" id="addModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal" aria-hidden="true">
                    &times;
                </button>
                <h4 class="modal-title" id="myModalLabel">
                    增加使用者資訊
                </h4>
            </div>
            <div class="modal-body">
                
                <div>
                    <form class="form-horizontal" role="form" action="/add_user/" method="POST">
                        {% csrf_token %}
                        <div class="form-group">
                          <label for="firstname" class="col-sm-2 control-label">使用者名稱</label>
                          <div class="col-sm-10">
                            <input type="text" class="form-control" name='account' id="firstname" placeholder="">
                          </div>
                        </div>
                        <div class="form-group">
                          <label for="lastname" class="col-sm-2 control-label">密碼</label>
                          <div class="col-sm-10">
                            <input type="text" class="form-control" name='password' id="lastname" placeholder="">
                          </div>
                        </div>
                        <div class="form-group">
                            <label for="lastname" class="col-sm-2 control-label">姓名</label>
                            <div class="col-sm-10">
                              <input type="text" class="form-control" name="username" id="lastname" placeholder="">
                            </div>
                          </div>
                          <div class="form-group">
                            <label for="lastname"  class="col-sm-2 control-label">生日</label>
                            <div class="col-sm-10">
                              <input type="text" name='birthday' class="form-control" id="birthday" placeholder="2020-06-02">
                            </div>
                          </div>
                          <div class="form-group">
                            <label for="lastname" class="col-sm-2 control-label">性別</label>
                            <div class="col-sm-10" >
                            <select class="form-control" name="sex"> 
                              <option>男</option>
                              <option>女</option>
                            </select></div>
                           
                          </div>
                        <div class="form-group">
                            <div class="col-sm-offset-2 col-sm-10">
                                <button type="submit" class="btn btn-default">新增</button>
                                <button type="button" class="btn btn-default"  data-dismiss="modal">關閉</button>
                              </div>
                        </div>
                      </form>
                </div>
            </div>
        </div>
    </div>
</div>
<div style="width: 500px;">
  <table class="table table-bordered">
      <caption>使用者資訊</caption>
      <thead>
        <tr><td>賬號</td><td>密碼</td><td>使用者名稱</td><td>生日</td><td>性別</td></tr>
      </thead>
      <tbody>
              {% for i in all_user %}
              <tr>

              {% for j in i.values %}
              <td>{{j}}</td>
              {% endfor %}

          </tr>
              
              {% endfor %}
      </tbody>
  </table>
</div>
<body >
   
</body>
<script>
   $(function(){
   

   })
</script>

</html>
View Code

urls.py

"""FirstDjango URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/3.0/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  path('', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.urls import include, path
    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path
from . import views,dbmode

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', views.login),
    path('back_data/', views.get_data),
    path('form_commit.html/', views.form_commit_html),
    path('form_commit/', views.form_commit),
    path('form_commit_post/', views.form_commit_post),
    path('database.html/', dbmode.show_database_html),
    path('add_user/', dbmode.add_user),
    path('select_user/', dbmode.select_user),
]

dbmode.py

# -*- coding: utf-8 -*-
from django.shortcuts import render
from datetime import datetime

from Model.models import user_info


def show_database_html(request):
    return render(request, 'database.html')

def add_user(request):
    data=dict()
    account = request.POST['account']
    password = request.POST['password']
    username = request.POST['username']
    birthday = request.POST['birthday']
    birthday=datetime.strptime(birthday,'%Y-%m-%d')
    sex = request.POST['sex']
    user=user_info(account=account,password=password,username=username,birthday=birthday,sex=sex)
    ret=user.save()
    print('ret:{}'.format(ret))
    data['ret']=ret
    return render(request, 'database.html',data)

def select_user(request):
    all_user = user_info.objects.all()
    users=[]
    for user in all_user:
        one_user={}
        one_user['account']=user.account
        one_user['password']=user.password
        one_user['username']=user.username
        one_user['birthday']=str(user.birthday)[:11]
        one_user['sex']=user.sex
        users.append(one_user)
    data=dict()
    data['all_user']=users
    return render(request, 'database.html',data)

執行

(3) 修改,假設修改root的username

database.html

<a href="/update_user">
    修改
</a>

urls.py

path('update_user/', dbmode.update_user),

dbmode.py

def update_user(request):
    user = user_info.objects.get(account='root')
    user.username='root{}'.format(random.randint(1,10))
    user.save()
    return render(request, 'database.html')

執行

資料庫資料

(4)刪除,假設刪除admin1

database.html

<a href="/delete_user">
    刪除
</a>

urls.py

path('delete_user/', dbmode.delete_user),

dbmode.py

def delete_user(request):
    user = user_info.objects.get(account='admin1')
    user.delete()
    return render(request, 'database.html')

執行

資料庫