zoukankan      html  css  js  c++  java
  • django--模型层(ORM)-建表

    要说一个项目最重要的部分是什么那铁定数据了,也就是数据库,这篇就开始带大家走进django关于模型层model的使用,model主要就是操纵数据库不使用sql语句的情况下完成数据库的增删改查。本篇仅带领大家进行简单的建表、查询和删除,因为model的重要性所以后面几篇都会围绕ORM慢慢深入。

    本篇导论:

    一、ORM

    映射关系:

    表名 <-------> 类名

    字段 <-------> 属性     

    表记录 <------->类实例对象


    二、创建表(建立模型)

    1、创建表的代码写在项目下的models文件中

    1)比如我们创建一个图书表,建立如下:

    复制代码
    from django.db import models
    
    # Create your models here.
    
    class Book(models.Model):
        nid = models.AutoField(primary_key=True)    #AutoField有序整形 IntegerField整形
        title = models.CharField(max_length=32)    #CharField字符
        author = models.CharField(max_length=32)
        publishDate = models.DateField()    #DateField日期类型
        price = models.DecimalField(max_digits=5, decimal_places=2)    #DecimalField浮点型也可以用FloatField
    复制代码

    类名就是表名,属性就是字段。继承django提供给我们的用于做转换的models.Model才能将我们写的类转化为数据库

    定义好模型之后,你需要告诉Django 使用这些模型。你要做的就是修改配置文件。

    2)字段常用参数

    View Code

    2、修改配置文件setting

    1)django默认使用的是sqlite3数据库,我们使用的是mysql数据库所以需要修改配置

    原先配置(将这些配置注释掉)

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        }
    }

    重新配置

    复制代码
    DATABASES = {
    
        'default': {
               
            'ENGINE': 'django.db.backends.mysql',
    
            'NAME': 'blog',    #你的数据库名称 数据库需要自己提前建好
    
            'USER': 'root',   #你的数据库用户名
    
            'PASSWORD': '', #你的数据库密码
    
            'HOST': '', #你的数据库主机,留空默认为localhost
    
            'PORT': '3306', #你的数据库端口
    
        }
    }    
    复制代码

    3、创建表命令

    1)同步更改数据库表或字段

    老版本:
    python manage.py syncdb
         
    Django 1.7.1 及以上的版本需要用以下命令
    python manage.py makemigrations
    python manage.py migrate

    2)运行python manage.py makemigrations后我们应用下的migrations文件夹里会自动生成一个文件,是将我们写的类进一步转化:

    复制代码
    # -*- coding: utf-8 -*-
    # Generated by Django 1.11.6 on 2017-10-25 03:30
    from __future__ import unicode_literals
    
    from django.db import migrations, models
    
    class Migration(migrations.Migration):
    
        initial = True
    
        dependencies = [
        ]
    
        operations = [
            migrations.CreateModel(
                name='Book',
                fields=[
                    ('nid', models.AutoField(primary_key=True, serialize=False)),
                    ('title', models.CharField(max_length=32)),
                    ('author', models.CharField(max_length=32)),
                    ('publishDate', models.DateField()),
                    ('price', models.DecimalField(decimal_places=2, max_digits=5)),
                ],
            ),
        ]
    复制代码

    3)运行python manage.py migrate后表就插入到我们的数据库中了

    4)注意:

    如果我们的python是3.x版本运行上面两条会报错

    No module named "MySQLdb"

    在3.x走数据库用的是pymysql模块所以我们需要告诉django用pymysql

    在应用下的__init__.py文件里添加代码

    import pymysql
    
    pymysql.install_as_MySQLdb()

    运行后在数据库里查看:

    会发现django给我们创建了很多表 我们自己创建的Book表会被自动改名为 应用名_book 这样避免了我们在不同的应用中有相同的表,其他的表后面用到时会一一介绍。


    三、查看表

    1、先在视图函数view中将数据取出来

    from app01 import models    #app01是应用名
    
    def index(request):
        # 从数据库取出所有书籍对象
        bookList=models.Book.objects.all()  #    [bookObj1,.....]
        return render(request,"index.html",{"bookList":bookList})

    查询相关

    <1> all():    查询所有结果
    <2> filter():    查询所给筛选条件相匹配的对象

    2、在template模版中接收

    复制代码
    {% for book_obj in bookList %}
        <tr>
            <td>{{ book_obj.nid }}</td>
            <td>{{ book_obj.title }}</td>
            <td>{{ book_obj.author }}</td>
            <td>{{ book_obj.publishDate|date:"Y-m-d" }}</td>
            <td>{{ book_obj.price }}</td>
        </tr>
    {% endfor %}
    复制代码

    四、删除

    删除方法就是 delete()。它运行时立即删除对象而不返回任何值。

    比如我们给表中添加一个删除按钮来实现点击按钮后数据库每条记录的删除

    1、template模版

    复制代码
    {% for book_obj in bookList %}
        <tr>
            <td>{{ book_obj.nid }}</td>
            <td>{{ book_obj.title }}</td>
            <td>{{ book_obj.author }}</td>
            <td>{{ book_obj.publishDate|date:"Y-m-d" }}</td>
            <td>{{ book_obj.price }}</td>
            <td>
                <a href="/del/{{ book_obj.nid }}"><button class="btn btn-danger">删除</button></a>
            </td>
        </tr>
    {% endfor %}
    复制代码

    2、url 分发

    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^index/', views.index),
        url(r'^del/(d+)', views.delBook),
    ]

    3、视图函数view实现删除

    def delBook(request,id):
        models.Book.objects.filter(nid=id).delete()
        return redirect("/index/")
  • 相关阅读:
    JSP注册登录页教程
    SSH框架搭建详细图文教程
    .Net Core2.2升级到3.1小记
    AspNetCore容器化(Docker)部署(四) —— Jenkins自动化部署
    AspNetCore容器化(Docker)部署(三) —— Docker Compose容器编排
    AspNetCore容器化(Docker)部署(二) —— 多容器通信
    AspNetCore容器化(Docker)部署(一) —— 入门
    asp.net core 3.0 gRPC框架小试
    HttpClient Received an unexpected EOF or 0 bytes from the transport stream
    PdfReader按页将PDF切割成多个PDF
  • 原文地址:https://www.cnblogs.com/52forjie/p/7825214.html
Copyright © 2011-2022 走看看