6.模型基础

2019-02-24  本文已影响0人  爱修仙的道友
  1. 数据库的连接配置
    django 连接mysql的配置流程:
create database text;
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'text',
        'USER': 'root',
        'PASSWORD': 'qwe123',
        'HOST': '127.0.0.1',
        'PORT': '3306',
    }
}
    import pymysql
    pymysql.install_as_MySQLdb()
TIME_ZONE = 'Asia/Shanghai' # 北京时间
  1. django的ORM系统
  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)
    # 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. 数据的增删改查
    • 工具 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)
#---------------------------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>

#----------------------------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
#----------------------------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
上一篇 下一篇

猜你喜欢

热点阅读