- 数据库的连接配置
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' # 北京时间
- django的ORM系统
- 对象关系映射(Object Relational Mapping,简称ORM)!
简单的说就是用面向对象的方式,描述数据库,操作数据库,达到不用编写SQL语句就能对数据库进行增删改查。
- 模型的创建与激活
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)
- 总结:
- 每一个模型都是django.db.models.Model的子类(模型对表)
- 类变量 表示模型中的数据库字段(类变量对字段)
- 每一个字段由一个字段类的实例表示
- 激活模型
- 在项目中注册app -- INSTALLED_APPS = [ ]
- 运行数据库迁移命令(一定要在项目根目录下)
makemigrations app
- 运行migrate命令,使迁移生效
migrate app
- 表名 app(name)_模型名(name.lower)
- 数据的增删改查
- 工具 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
# 查询所有值,返回查询集
>>> Student.objects.all()
# --------------添加数据方式一--------------------#
>>> s1 = Student()
>>> s1.name = '梦杰'
>>> s1.age = 1
>>> s1.qq = '123456'
# 必须要使用save方法,才可在数据库增加数据
>>> s1.save()
>>> Student.objects.all()
]>
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()
]>
# --------------添加数据方式二--------------------#
>>> Student.objects.create(name='魏刚',age=15)
>>> Student.objects.all()
, ]>
# --------------添加数据方式三--------------------#
>>> Student.objects.get_or_create(name='心蓝',age=18)
# 创建的为True
(, True)
# 查询的为False
>>> Student.objects.get_or_create(name='梦杰',age=1)
(, False)
#---------------------------all查询,返回查询集,不会进行数据库查询----------------------------#
>>> res = Student.objects.all()
>>> print(res)
, , , , ]>
>>> 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]
]>
>>> res[1:2].query
>>> 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='心蓝')
]>
>>> 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='心蓝')
#----------------------------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
>>> s.delete()
(1, {'index.Student': 1})
#----------------------------filter查询批量删除-----------------------------#
>>> Student.objects.filter(sex=1).delete()
(4, {'index.Student': 4})
>>> Student.objects.all()
>>> Student.objects.get_or_create(name='liuwei',sex=1,age=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 %}
{{ forloop.counter }} |
{{ student.name }} |
{{ student.age|add:1 }} |
{{ student.sex|to_male:'en'}} |
{% endfor %}