美文网首页
6.模型基础

6.模型基础

作者: 爱修仙的道友 | 来源:发表于2019-02-24 18:05 被阅读0次
  1. 数据库的连接配置
    django 连接mysql的配置流程:
  • 安装 pymysql pip install pymysql
  • 创建数据库用户
    创建拥有数据库权限的用户 -- root
  • 创建数据库
create database text;
  • 修改配置
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'text',
        'USER': 'root',
        'PASSWORD': 'qwe123',
        'HOST': '127.0.0.1',
        'PORT': '3306',
    }
}
  • 修改项目文件夹(和settings.py文件所在的目录)下init.py 文件写上:
    import pymysql
    pymysql.install_as_MySQLdb()
  • 设置时区
TIME_ZONE = 'Asia/Shanghai' # 北京时间
  1. django的ORM系统
  • 对象关系映射(Object Relational Mapping,简称ORM)!
    简单的说就是用面向对象的方式,描述数据库,操作数据库,达到不用编写SQL语句就能对数据库进行增删改查。
  1. 模型的创建与激活
  • 创建模型
    创建Student模型,即创建一个类
from django.db import models


class Student(models.Model):
    name = models.CharField(max_length=20)
    age = models.SmallIntegerField(default=0)
    sex = models.SmallIntegerField(default=1)
    # CharField 最后不要设置 null=True
    qq = models.CharField(max_length=20, default='')
    phone = models.CharField(max_length=20, default='')
    # auto_now_add=True在创建对象时自动将当前时间(国际时间UTC)保存,显示时会自动转为本区时间
    # verbose_name 指定可读的名称
    create_time = models.DateTimeField(verbose_name='创建时间', auto_now_add=True)
  • 总结:
    1. 每一个模型都是django.db.models.Model的子类(模型对表)
    2. 类变量 表示模型中的数据库字段(类变量对字段)
    3. 每一个字段由一个字段类的实例表示
  • 激活模型
    1. 在项目中注册app -- INSTALLED_APPS = [ ]
    2. 运行数据库迁移命令(一定要在项目根目录下)
      makemigrations app
    3. 运行migrate命令,使迁移生效
      migrate app
  • 表名 app(name)_模型名(name.lower)
  1. 数据的增删改查
    • 工具 djang shell 调试工具
      python manage.py shell

    • 3种方法
(Dream) pyvip@vip:~/Test$ python manage.py shell
Python 3.6.5 (default, Apr  1 2018, 05:46:30) 
[GCC 7.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
# 从app导入Student 数据库模型
>>> from index.models import Student
# Student 管理器(自动创建)
>>> Student.objects
<django.db.models.manager.Manager object at 0x7fedecb9e4e0>
# 查询所有值,返回查询集
>>> Student.objects.all()
<QuerySet []>
# --------------添加数据方式一--------------------#
>>> s1 = Student()
>>> s1.name = '梦杰'
>>> s1.age = 1
>>> s1.qq = '123456'
# 必须要使用save方法,才可在数据库增加数据
>>> s1.save()
>>> Student.objects.all()
<QuerySet [<Student: Student object (1)>]>
from django.db import models

# --------------增设查询名显示优化--------------------#
class Student(models.Model):
    name = models.CharField(max_length=20)
    age = models.SmallIntegerField(default=0)
    sex = models.SmallIntegerField(default=1)
    qq = models.CharField(max_length=20, default='')
    phone = models.CharField(max_length=20, default='')
    create_time = models.DateTimeField(verbose_name='创建时间', auto_now_add=True)

    def __str__(self):
        return "{}-{}".format(self.name, self.age)

>>> from index.models import Student
>>> Student.objects.all()
<QuerySet [<Student: 梦杰-1>]>

# --------------添加数据方式二--------------------#
>>> Student.objects.create(name='魏刚',age=15)
<Student: 魏刚-15>
>>> Student.objects.all()
<QuerySet [<Student: 梦杰-1>, <Student: 魏刚-15>]>

# --------------添加数据方式三--------------------#
>>> Student.objects.get_or_create(name='心蓝',age=18)
# 创建的为True
(<Student: 心蓝-18>, True)
# 查询的为False
>>> Student.objects.get_or_create(name='梦杰',age=1)
(<Student: 梦杰-1>, False)

  • 3种方法
#---------------------------all查询,返回查询集,不会进行数据库查询----------------------------#
>>> res = Student.objects.all()
>>> print(res)
<QuerySet [<Student: 梦杰-1>, <Student: 魏刚-15>, <Student: 心蓝-18>, <Student: 赵四-18>, <Student: 梦杰-18>]>
>>> print(res.query)
SELECT `index_student`.`id`, `index_student`.`name`, `index_student`.`age`, `index_student`.`sex`, `index_student`.`qq`, `index_student`.`phone`, `index_student`.`create_time` FROM `index_student`

        #-----------------------可以切片操作------------------#
>>> res[1:2]
<QuerySet [<Student: 魏刚-15>]>
>>> res[1:2].query
<django.db.models.sql.query.Query object at 0x7f54e44737f0>
>>> print(res[1:2].query)
SELECT `index_student`.`id`, `index_student`.`name`, `index_student`.`age`, `index_student`.`sex`, `index_student`.`qq`, `index_student`.`phone`, `index_student`.`create_time` FROM `index_student`  LIMIT 1 OFFSET 1

#---------------------------filter查询,返回查询集,不会进行数据库查询----------------------------#
>>> Student.objects.filter(name='心蓝')
<QuerySet [<Student: 心蓝-18>]>
>>> print(res.query)
SELECT `index_student`.`id`, `index_student`.`name`, `index_student`.`age`, `index_student`.`sex`, `index_student`.`qq`, `index_student`.`phone`, `index_student`.`create_time` FROM `index_student` WHERE `index_student`.`name` = 心蓝


#----------------------------get查询,返回数据,直接对数据库进行查询-----------------------------#
>>> Student.objects.get(name='心蓝')
<Student: 心蓝-18>


  • 2种方法
#----------------------------get查询条修改 save保存-----------------------------#
>>> s= Student.objects.get(name='心蓝')
>>> s.age
18
>>> s.phone
''
>>> s.age = 16
>>> s.phone = '123456789'
>>> s.save()
>>> Student.objects.get(name='心蓝').age
16
>>> Student.objects.get(name='心蓝').phone
'123456789'
>>> 
#----------------------------filter查询批量修改-----------------------------#
>>> Student.objects.filter(name='心蓝').update(age=19)
1
>>> Student.objects.get(name='心蓝').age
19

  • 2种方法
#----------------------------get查询单个删除-----------------------------#
>>> s = Student.objects.get(name='心蓝')
>>> s
<Student: 心蓝-19>
>>> s.delete()
(1, {'index.Student': 1})

#----------------------------filter查询批量删除-----------------------------#
>>> Student.objects.filter(sex=1).delete()
(4, {'index.Student': 4})
>>> Student.objects.all()
<QuerySet []>

  • 案例
>>> Student.objects.get_or_create(name='liuwei',sex=1,age=18)
(<Student: liuwei-18>, True)

#----------------------------views.py------------------------------#
from django.views import View
from django.shortcuts import render
from .models import Student

class Index(View):


    def get(self, request):

        students = Student.objects.all()
        return render(request, 'index/home.html', context={
            'students': students,
        })

#----------------------------home.html------------------------------#

              {% for student in students %}
                <tr>
                <td><a href="{% url 'index:home' %}">{{ forloop.counter }}</a></td>
                <td>{{ student.name }}</td>
                <td>{{ student.age|add:1 }}</td>
                <td>{{ student.sex|to_male:'en'}}</td>
                </tr>
              {% endfor %}


eg.png

相关文章

  • 6.模型基础

    数据库的连接配置django 连接mysql的配置流程: 安装 pymysql pip install pymys...

  • 【读书笔记】《 Hadoop构建数据仓库实践》第2章

    第2章 数据仓库设计基础 2.1 关系数据模型 2.1.1 关系数据模型中的结构 6.关系表的属性 关系表有如下属...

  • 【Tensorflow】MNIST解析

    1.准备数据2.搭建模型3.训练模型4.保存模型5.测试模型6.查看模型

  • 测试

    研发模型:1.大爆炸模型2.瀑布模型3.增量模型4.螺旋模型5.快速原型模型6.双v模型7.敏捷模型 测试的特点:...

  • Keras--第一个神经网络模型

    步骤如下:1. 导入数据2. 定义模型3. 编译模型4. 训练模型5. 评估模型6. 代码整理数据集:采用免费的数...

  • keras入门

    1. 加载模块 2. 初始化变量 3.准备数据 4.建立模型 5.编译模型 6. 迭代训练 7.模型评估 8. 模型保存

  • 2.五种IO模型

    0.IO介绍1.阻塞IO模型2.非阻塞IO模型3.IO多路复用模型4.信号驱动IO模型5.异步IO模型6.五种IO...

  • 【maya2020快捷方法】Maya模型制作中,等比扩展模型,模

    1,当我们根据目标模型的需求,在原本的模型基础上,扩大各个模型点的方位,做包围原模型。 若是我们在规整的模型基础上...

  • 6. msf基础

    1、完成msf升级与msf常用命令使用2、完成ms17-010、cve02019-0708、ms12-020、cv...

  • 2018-03-30-----BFS基础模型

    1、BFS基础模型

网友评论

      本文标题:6.模型基础

      本文链接:https://www.haomeiwen.com/subject/tdavyqtx.html