码迷,mamicode.com
首页 > 其他好文 > 详细

Django之ORM

时间:2018-04-06 22:34:36      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:Django pymysql

一、概念

对象关系映射(Object Relational Mapping,简称ORM),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。

从效果上说,它其实是创建了一个可在编程语言里使用的--“虚拟对象数据库”。

二、Django中操作MySQL数据库

1. 自己用SQL语句建个数据库

use mysql;
UPDATE user SET password=PASSWORD("123456") WHERE user='root';
FLUSH PRIVILEGES;
create database s20;


2、配置连接数据库

setting.py文件中配置连接mysql数据库:


DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',  # 告诉Django连接数据库的类型
        'NAME': 'ceshi',                         #数据库的库,需要手动在mysql中先建好
        'HOST': "127.0.0.1",
        'PORT': 3306,                           # 不要加引号
        'USER': "root",
        "PASSWORD": "123456",                # 要加引号
    }
}



3、使用pymysql连接MySQL数据库

在__init__.py文件中使用pymysql的功能:


import pymysql

pymysql.install_as_MySQLdb()


4、models.py文件中,根据特定的语法创建类

from django.db import models
# Create your models here.
class Book(models.Model):
    # 定义一个自增的ID主键
    id = models.AutoField(primary_key=True)
    # 定义一个最大长度为32的varchar字段
    title = models.CharField(max_length=32)


5、执行两个命令

python3 manage.py makemigrations            # 记录 app/models.py文件的任何改动
python3 manage.py migrate                   #把上面的改动翻译成SQL语句,然后去数据库中执行


6、PyCharm连接mysql创建表和删除表

技术分享图片

技术分享图片

技术分享图片

技术分享图片

如果要删除表,需要将models.py文件创建的类注销掉即可

from django.db import models
# Create your models here.
# class Book(models.Model):
#     # 定义一个自增的ID主键
#     id = models.AutoField(primary_key=True)
#     # 定义一个最大长度为32的varchar字段
#     title = models.CharField(max_length=32)


7、数据行操作

>>> from mysite import models

(1)数据行增
>>> models.Book.objects.create(title="my life")
>>> models.Book.objects.create(title="world")

(2)数据行删
>>> models.Book.objects.get(id=2).delete()

(3)数据行改
>>> obj = models.Book.objects.get(id=2)
>>> obj.title = "my parents"
>>> obj.save()

(4)数据行查
查单个:
>>> obj = models.Book.objects.get(id=2)
>>> obj.title

查所有:
>>> objs = models.Book.objects.all()
>>> objs.title

技术分享图片

三、书籍管理系统示例


urls.py文件:


from django.conf.urls import url
from django.contrib import admin
from mysite import views
urlpatterns = [
    # 展示书
    url(r'^book_list/', views.book_list),
    # 添加新书
    url(r'^add_book/', views.add_book),
    # 删除书
    url(r'delete_book/', views.delete_class),
    # 编辑书
    url(r'edit_book/', views.edit_book)
]

views.py文件:

from django.shortcuts import render
# Create your views here.
from django.shortcuts import HttpResponse, render, redirect
from mysite import models
# 展示书列表的函数
def book_list(request):
    # 找到所有的书
    books = models.Book.objects.all()
    return render(request, "book_list.html", {"book_list": books})
# 添加新书
def add_book(request):
    # 如果请求方法是post,表示前端页面填完了正在提交新书的信息
    if request.method == "POST":
        new_book_name = request.POST.get("book_name")
        # 去数据库里面创建新的一本书
        models.Book.objects.create(title=new_book_name)
        # 跳转回之前展示书籍列表的页面
        return redirect("/book_list/")
    # 返回一个页面让用户填写新书的相关信息
    return render(request, "add_book.html")
# 删除书
def delete_class(request):
    # 取到要删除的书的ID,如何从GET(URL)请求中获取数据
    delete_id = request.GET.get("id")
    # g根据ID值 去数据库中取对应的数据
    models.Book.objects.get(id=delete_id).delete()  # 找到并删除
    return redirect("/book_list/")
# 编辑书
def edit_book(request):
    # 如果是post请求,就表明前端页面编辑完了,把新的书信息发过来
    if request.method == "POST":
        # 取到正在编辑的书的ID
        book_id = request.POST.get("book_id")
        # 取到编辑之后的书的名字
        new_book_title = request.POST.get("book_name")
        # 更新书的title
        book_obj = models.Book.objects.get(id=book_id)
        book_obj.title = new_book_title
        # 保存
        book_obj.save()
        # 跳转回书列表页
        return redirect("/book_list/")
    # 返回页面让用户编辑书
    # 先取到当前编辑的书的ID值
    edit_id = request.GET.get("id")
    # 根据ID值取出具体的书对象
    book = models.Book.objects.get(id=edit_id)
    return render(request, "edit_book.html", {"book": book })


book_list.html 文件内容:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="/static/bootstrap/css/bootstrap.min.css">
    <title>书列表</title>
</head>
<body>
<div>
    <a href="/add_book/" class="btn btn-success">添加新书</a>
    <div class="panel panel-primary">
        <div>书籍管理</div>
        <div>
            <table class="table table-bordered table-striped">
                <thead>
                <tr>
                    <th>#</th>
                    <th>书名</th>
                    <th>操作</th>
                </tr>
                </thead>
                <tbody>
                {% for book in book_list %}
                    <tr data-id="{{ book.id }}">
                        <td>{{ forloop.counter }}</td>
                        <td>{{ book.title }}</td>
                        <td>
                            <a href="/delete_book/?id={{ book.id }}" class="btn btn-danger">删除</a>
                            <a href="/edit_book/?id={{ book.id }}" class="btn btn-info">编辑</a>
                        </td>
                    </tr>
                {% endfor %}
                </tbody>
            </table>
        </div>
    </div>
</div>
</body>
</html>

edit_book.html文件内容:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="/static/bootstrap/css/bootstrap.min.css">
    <title>添加新书</title>
</head>
<body>
<div style="margin-top: 100px">
    <div>
        <div class="col-md-6 col-md-offset-3">
            <div class="panel panel-primary">
                <div>编辑书</div>
                <div>
                    <form action="/edit_book/" method="post">
                        <input hidden type="text" name="book_id" value="{{ book.id }}">
                        <div>
                            <label for="inputbookname" class="col-sm-2 control-label">书籍名称</label>
                            <div>
                                <input type="text" id="inputbookname" name="book_name" value="{{ book.title }}">
                            </div>
                        </div>
                        <div>
                            <div class="col-sm-offset-2 col-sm-10">
                                <button type="submit" class="btn btn-default">提交修改</button>
                            </div>
                        </div>
                    </form>
                </div>
            </div>
        </div>
    </div>
</div>
</body>
</html>

add_book.html文件内容:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="/static/bootstrap/css/bootstrap.min.css">
    <title>添加新书</title>
</head>
<body>
<div style="margin-top: 100px">
    <div>
        <div class="col-md-6 col-md-offset-3">
            <div class="panel panel-primary">
                <div>添加新书</div>
                <div>
                    <form action="/add_book/" method="post">
                        <div>
                            <label for="inputbookname" class="col-sm-2 control-label">书籍名称</label>
                            <div>
                                <input type="text" id="inputbookname" name="book_name">
                            </div>
                        </div>
                        <div>
                            <div class="col-sm-offset-2 col-sm-10">
                                <button type="submit" class="btn btn-default">添加新书</button>
                            </div>
                        </div>
                    </form>
                </div>
            </div>
        </div>
    </div>
</div>
</body>
</html>



Django之ORM

标签:Django pymysql

原文地址:http://blog.51cto.com/qidian510/2095269

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!