一 ORM简介
(1) 询数据层次图解:如果操作mysql,ORM是在pymysq之上又进行了一层封装
(2) MVC或者MTV框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要 依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人员的工作量,不需要面对因数据库变更而导致的无效劳动
(3)ORM是 '对象—关系—映射'的简称。
ORM可以做的事情:
1 创建表,修改表,删除表
2 插入数据
3 修改数据
4 删除数据
不能干: 不能创建数据库
类名 ------->表
对象--------->一条数据
属性----------> 字段
二 使用pymysql步骤:
(1) 创建数据库(ORM不能创建数据库)
(2)在setting 里配置
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'lqz', 'USER': 'root', 'PASSWORD': '123456', 'HOST': '127.0.0.1', 'PORT': 3306, 'ATOMIC_REQUEST': True, 'OPTIONS': { "init_command": "SET storage_engine=MyISAM", } } } ''' 'NAME':要连接的数据库(数据库名字),连接前需要创建好 'USER':连接数据库的用户名 'PASSWORD':连接数据库的密码 'HOST':连接主机,默认本机 'PORT':端口 默认3306 'ATOMIC_REQUEST': True, 设置为True统一个http请求对应的所有sql都放在一个事务中执行(要么所有都成功,要么所有都失败)。 是全局性的配置, 如果要对某个http请求放水(然后自定义事务),可以用non_atomic_requests修饰器 'OPTIONS': { "init_command": "SET storage_engine=MyISAM", } 设置创建表的存储引擎为MyISAM,INNODB '''
(3) 在app的 __init__.py 文件里写上:
import pymysql pymysql.install_as_MySQLdb() '''
(4) 在models里定义类,类必须继承models.Model
(5)写属性,对应着数据库的字段
创建名为app01的app,在app01下的model.py中创建模型 from django.db import models class UserInfo(models.Model): id = models.AutoField(primary_key=True) name = models.CharField(max_length=32) password = models.CharField(max_length=32,null=True) # default='' 默认值 # null= True 自断可以为空 gender = models.IntegerField() birthday = models.DateField() def __str__(self): return self.name //增加和删除字段 删除,直接注释掉字段,执行数据库迁移命令即可 新增字段,在类里直接新增字段,直接执行数据库迁移命令会提示输入默认值,此时需要设置 publish = models.CharField(max_length=12,default='人民出版社',null=True)
(6) 执行 python3 manage.py makemigrations (相当于做一个记录)
(7)执行 python3 manage.py migrate(会把记录执行到数据库)
创建出来的表名是: app的名字_类名
最后通过以上两条数据库迁移命令即可在指定的数据库中创建表 #注意: 1 数据库迁移记录都在 app01下的migrations里 2 使用showmigrations命令可以查看没有执行migrate的文件 3 makemigrations是生成一个文件,migrate是将更改提交到数据量
三 添加表记录
views视图层 from django.shortcuts import render,HttpResponse from app01.models import * def register(request): if request.methods == 'POST': name = request.POST.get('name') password = request.POST.get('password') gender = request.POST.get('gender') gender = request.POST.get('birthday') #第一种方式 user = UserInfo(birthday=birthday,name=name,password=password,gender=gender) user.save() #第二种方式(推荐这种) 创建成功,会返回一个对象 user = UserInfo.object.create(birthday=birthday,name=name,password=password,gender=gender) print(user) return HttpResponse('注册成功') def user_list(request): # 把数据表里用户全拿出来 user_list = UserInfo.object.all() #all():查询所有结果 print(type(user_list)) #类 print(user_list[0].name) #表里面的每条数据相当于一个对象 可以.访问对象属性 print(user_list[0].password) return render(request,'user_list',{'user_list':user_list})